跳转到内容

PHP 编程/Cookie

来自维基教科书,自由的教科书

Cookie 是存储在客户端计算机上的文本形式的小数据块。 通常,Cookie 仅用于存储少量数据,包括用户偏好、时间等。 尽管 Cookie 本身无害,但有些人出于隐私方面的担忧而禁止 Cookie。 在这种情况下,您必须使用会话

Cookie 最初由 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,任何其他代码之前。 通常,您只需要使用名称、值和过期参数。 如果未设置过期,Cookie 将在客户端关闭浏览器时过期。

示例
setcookie("wikibooks", "user", time()+3600);

上面的代码将设置一个名为 wikibooks、值为 user 的 Cookie,并且在设置后一小时过期。


 setcookie("test", "PHP-Hypertext-Preprocessor", time()+60, "/location", 1);

这里,setcookie 函数被调用了四个参数(setcookie 还有 1 个可选参数,这里没有使用)。 在上面的代码中,第一个参数是 Cookie 名称,第二个参数是 Cookie 内容,第三个参数是 Cookie 过期的时间(以秒为单位)(time() 返回当前时间,以秒为单位,因此 time()+60 是从现在开始的一分钟)。 路径或位置元素可以省略,但它确实允许您轻松地为目录中的所有页面设置 Cookie,尽管通常不建议使用此方法。

您应该注意,由于 Cookie 是与 HTTP 标头一起发送的,因此代码必须位于页面的顶部(是的,甚至在 DOCTYPE 声明之上)。 任何其他位置都会产生错误。

[编辑 | 编辑源代码]

如果服务器在用户计算机上设置了 Cookie,则用户的浏览器每次加载页面时都会将其发送到服务器。 您的服务器发送的每个 Cookie 的名称都存储在超全局数组 _COOKIE 中。 因此,在上面的示例中,Cookie 将通过调用 $_COOKIE['test'] 来检索。 要访问 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/
华夏公益教科书