PHP Cookie 工作原理与读写操作实例

不晚
不晚
发布时间:2026-10-13 | 5人浏览过
原创

Cookie 是 Web 开发中用于“状态管理”的关键技术,使服务器能够识别用户并记住其偏好或登录状态。在 PHP 中,主要通过 setcookie() 函数发送 Cookie,并通过预定义的 $_COOKIE 超全局变量进行读取。本文将解析其底层逻辑,并提供从基础设置到数组处理及删除操作的完整代码实例。

什么是 Cookie 及其工作原理

Cookie 是一小段文本信息,伴随着用户的请求和页面在 Web 服务器和浏览器之间传递。由于 HTTP 协议本身是无状态的,Web 应用程序无法直接判断两次访问是否来自同一用户,而 Cookie 为了解决这一问题提供了方案。

当用户首次访问网站时,PHP 服务器可以生成一个 Cookie 并将其发送给客户端浏览器。浏览器会将该 Cookie 保存在本地硬盘上(具体路径取决于操作系统和浏览器版本)。当用户下次访问该站点时,浏览器会自动将与之相关的 Cookie 随页面请求一起发送回服务器。服务器端 PHP 会自动将这些传入的 Cookie 转换为全局变量 $_COOKIE['xxx'],从而允许应用程序读取这些信息。

从根本上说,Cookie 是一种保持 Web 应用程序连续性(即执行“状态管理”)的方法,使 Web 站点能够“记住”特定的访问者。

创建与设置 Cookie

在 PHP 中,使用 setcookie() 函数来设置 Cookie。需要注意,由于 Cookie 是 HTTP 标头的一部分,setcookie() 函数必须在 HTML 文档的任何内容发送到浏览器之前被调用,这与 header() 函数的限制相同。

第1步:设置基本 Cookie

目的:创建一个名为 cookiename 的 Cookie,保存用户自定义的值,并设定过期时间为当前时间的一周后。

语法:
bool setcookie ( string $name , string $value = "" , int $expire = 0 , string $path = "" , string $domain = "" , bool $secure = false , bool $httponly = false )

参数说明:常用参数包括名称(name)、值(value)和过期时间(expire)。其余参数如路径、域、安全标记等可根据需求配置。

操作代码:

$value = "the best way is by yourself";
// 设置 cookie 有效期为一周 (60秒 * 60分 * 24小时 * 7天)
setcookie("cookiename", $value, time()+60*60*24*7);

第2步:创建 Cookie 数组

目的:在一次操作中存储多个相关数据,或通过关联键值对存储结构化信息。

操作方法 A(索引数组):

setcookie("CookieArray[0]", "Value1");
setcookie("CookieArray[1]", "Value2");

操作方法 B(关联数组):

setcookie("CookieArray['one']", "Value1");
setcookie("CookieArray['two']", "Value2");

在后续页面中,可以通过遍历 $_COOKIE 来获取这些数组数据。例如:

<?php
// 刷新页面后验证
if(isset($_COOKIE['cookie'])){
    foreach($_COOKIE['cookie'] as $name => $value){
        echo "$name:$value<br />\n";
    }
}
?>

注意路径作用域

如果未指定路径,Cookie 默认只能在设置它的文件所在目录下被访问。为了跨目录共享,建议在调用 setcookie() 时明确指定 $path 参数。

读取与接收 Cookie

当客户端再次访问网站时,PHP 会自动从 Web 服务器接收 HTTP 头部中的 Cookie 数据。处理方式与表单数据类似:

1. 直接使用 $_COOKIE["cookiename"] 获取对应键名的值。
2. 不推荐使用已废弃的 $HTTP_COOKIE_VARS["cookiename"]。

关键行为提示:在设置 Cookie 的同一个页面脚本中,立即尝试 echo $_COOKIE["name"] 通常不会有输出。这是因为 Cookie 将在下一次页面加载时才生效。若需看到设置的结果,必须刷新当前页面或跳转到新页面。

删除 Cookie

由于 Cookie 存储在客户端,服务器无法直接彻底销毁它,但可以通过让 Cookie 立即失效的方式达到删除的目的。

第1步:通过过期时间删除

目的:强制浏览器清除指定的 Cookie。

操作:将过期时间设置为当前时间之前的某个时间点(例如 time()-1)。

// 立即使 MyCookie 失效
setcookie("MyCookie", "", time()-1);

注意:即使在删除操作中,Cookie 的值在当前页的生命周期内可能仍然有效,但在浏览器端即刻被标记为过期,不再随请求发送。

第2步:通过会话生存期删除

若要设置 Cookie 在关闭浏览器后立即失效,可以将过期时间设为 0 或不设置此值:
setcookie("name", "value", 0);

Cookiie 使用注意事项与局限性

在使用 Cookie 机制时,开发者需留意以下限制和安全问题:

  • 无前置输出限制:setcookie() 之前绝对不能有任何 HTML 输出,包括空格、换行或空白行。否则会导致 "Headers already sent" 错误。
  • 数量与大小限制:不同浏览器对 Cookie 的处理存在差异。一般而言,一个浏览器能创建的 Cookie 总数最多为 300 个,且单个 Cookie 不能超过 4KB。每个 WEB 站点能设置的 Cookie 数也有限制(通常为 20 个)。
  • 安全性考量:Cookie 是保存在客户端明文文本中的。用户可以在浏览器设置中禁用 Cookie,此时你的基于 Cookie 的功能将完全失效。因此,不应过度依赖 Cookie 进行关键业务验证,应设计备选方案(如结合 Session 或 URL 参数)。
  • 隐私意识:Cookie 会跟踪用户行为,务必确保符合相关法律法规及隐私政策要求。

以上就是关于 PHP Cookie 工作原理、读写操作实例及注意事项的详细内容,更多关于 PHP 前端交互的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表