PHP 编程/Cookies
Cookies 是存储在客户端计算机上的小型文本数据。通常,Cookie 仅用于存储少量数据,包括用户偏好、时间等。尽管 Cookie 本身并不有害,但有些人出于隐私方面的考虑,不允许使用 Cookie。在这种情况下,您需要使用 会话。
Cookies 最初是由 Netscape 引入的。PHP 允许轻松设置和检索 Cookie。
使用 setcookie()[1] 可以非常轻松地设置 Cookie。
- 语法
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]])
其中 name
是 Cookie 的名称,value
是要包含在 Cookie 中的数据,expire
是 Cookie 过期的时间,path
是服务器上可以使用 Cookie 的路径,domain
可用于设置子域的权限,secure
如果设置为 true,则仅在存在安全连接时才传输 Cookie。
由于所有 Cookie 都是由服务器与 HTTP 标头一起发送的,因此您需要在页面开始处设置任何 Cookie,在任何其他代码之前。您通常只需要使用 name、value 和 expire 参数。如果没有设置 expire,则 Cookie 将在客户端关闭浏览器时过期。
- 示例
setcookie("wikibooks", "user", time()+3600);
上面的代码将设置一个名为 wikibooks、值为 user 的 Cookie,并且将在设置后一小时过期。
setcookie("test", "PHP-Hypertext-Preprocessor", time()+60, "/location", 1);
这里,setcookie 函数被调用了四个参数(setcookie 还有一个可选参数,这里没有使用)。在上面的代码中,第一个参数是 Cookie 的名称,第二个参数是 Cookie 的内容,第三个参数是 Cookie 过期的时间,以秒为单位(time() 返回当前时间的秒数,因此 time()+60 表示从现在开始一分钟)。路径或位置元素可以省略,但它确实允许您轻松地为目录中的所有页面设置 Cookie,尽管不建议使用此方法。
请注意,由于 Cookie 是与 HTTP 标头一起发送的,因此代码必须位于页面顶部(是的,即使在 DOCTYPE 声明之上)。任何其他位置都会产生错误。
如果服务器在用户的计算机上设置了一个 Cookie,那么用户的浏览器在每次页面加载时都会将它发送到服务器。您服务器发送的每个 Cookie 的名称都存储在超级全局数组 _COOKIE 中。因此,在上面的示例中,可以通过调用 $_COOKIE['test'] 来检索 Cookie。为了访问 Cookie 中的数据,我们使用 explode()[2]。explode() 将字符串变成一个带有特定分隔符的数组。这就是我们在 Cookie 内容中使用那些短划线(- 连字符)的原因。因此,要检索和打印出 Cookie 中的完整 PHP 形式,我们使用以下代码
$array = explode("-", $_COOKIE['test']); //retrieve contents of cookie
print("PHP stands for " . $array[0] . $array[1] . $array[2]); //display the content
注意:$_COOKIE 在 4.1.0 版中引入。在早期版本中,使用 $HTTP_COOKIE_VARS。
Cookie 通常用于
- 用户偏好
- 库存
- 测验或投票结果
- 用户认证
- 记住更长时间的数据
您绝不应该在 Cookie 中存储未加密的密码,因为 Cookie 可以被其他用户轻松读取。
您绝不应该在 Cookie 中存储关键数据,因为 Cookie 可以被其他用户轻松删除或修改。