跳转至内容

PHP 编程/Cookies

来自 Wikibooks,开放世界中的开放书籍

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 中存储关键数据,因为 Cookie 可以被其他用户轻松删除或修改。

参考资料

[编辑 | 编辑源代码]
  1. https://php.ac.cn/manual/en/function.setcookie.php
  2. https://php.ac.cn/explode/
华夏公益教科书