万维网由 HTTP 协议提供支持,HTTP 协议是一种无状态协议。Cookie 的机制帮助服务器维护以前请求的信息。PHP 透明地支持 HTTP Cookie。
- 当客户端首次发送其请求时,服务器会以 Cookie 的形式包含一小段数据及其响应。PHP 提供了 setcookie() 方法,用于在响应中注入 Cookie。
- 此 cookie 数据以文本文件的形式存储在客户的机器中。在对同一客户端的后续访问中,这些 Cookie 将作为请求标头的一部分包含在内。
- 服务器使用客户端请求中存在的所有 cookie 填充 PHP 超全局变量 “$_COOKIE”。
本章将教您如何设置 cookie、如何访问以及如何删除。
Cookie的剖析
Cookie 通常在 HTTP 标头中设置(尽管 JavaScript 也可以直接在浏览器上设置 Cookie)。设置 Cookie 的 PHP 脚本可能会发送如下所示的标头 -
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT;
path=/; domain=qikepu.com
Connection: close
Content-Type: text/html
如您所见,Set-Cookie 标头包含一个名称值对、一个 GMT 日期、一个路径和一个域。名称和值将进行 URL 编码。expires 字段是向浏览器发出的指令,要求浏览器在给定的时间和日期之后“忘记”cookie。
如果浏览器配置为存储 cookie,它将保留此信息直到到期日。如果用户将浏览器指向与 Cookie 的路径和域匹配的任何页面,它将重新将 Cookie 发送到服务器。浏览器的标题可能如下所示 -
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: zh
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz
然后,PHP 脚本将可以访问环境变量 $_COOKIE 或 $HTTP_COOKIE_VARS[] 保存所有 cookie 名称和值。上述 cookie 可通过以下方式访问 $HTTP_COOKIE_VARS["name"]。
PHP 设置 cookie
PHP 包含 setcookie 函数,用于创建要与 HTTP 响应一起发送到客户端的 cookie 对象。
参数
这是所有参数的详细信息 -
参数 | 说明 |
---|---|
name | 这将设置 Cookie 的名称,并存储在名为 HTTP_COOKIE_VARS 的环境变量中。此变量在访问 Cookie 时使用。 |
value | 这将设置命名变量的值,并且是您实际要存储的内容。 |
expire | 指定自 1970 年 1 月 1 日 00:00:00 GMT 以来的未来时间(以秒为单位)。在此之后,cookie 将变得无法访问。如果未设置此参数,则 Cookie 将在 Web 浏览器关闭时自动过期。 |
path | 指定 Cookie 有效的目录。单个正斜杠字符允许 cookie 对所有目录有效。 |
domain | 这可用于在非常大的域中指定域名,并且必须包含至少两个句点才能有效。所有 Cookie 仅对创建它们的主机和域有效。 |
security | 可以将其设置为 1 以指定 Cookie 只能通过使用 HTTPS 的安全传输发送,否则设置为 0,这意味着 Cookie 可以通过常规 HTTP 发送。 |
示例
下面给出的 PHP 脚本检查名为 username 的 cookie 是否已设置,如果是,则检索其值。如果没有,则设置新的 Cookie 用户名。
从 Apache 服务器的文档根目录运行此脚本。您应该会看到此消息 -
如果重新执行此脚本,则 Cookie 现在已设置。
浏览器的开发人员工具是一个非常有用的工具。您可以在它的帮助下设置、检索和删除 cookie。上述程序设置的 cookie 可以在浏览器开发者工具的 应用(Application) 选项卡下查看。

如下所示的 foreach 循环检索所有 cookie -
以下脚本包含一个 HTML 表单。它将表单数据发送到 setcookie.php 脚本,该脚本使用从 $_POST 数组中检索到的数据设置 Cookie。
HTML 表单由以下代码呈现 -
SetCookie.php 读取表单数据并设置 Cookie。
使用另一个 getcookie.php 代码,我们可以检索 cookie 集。
PHP 访问 Cookie
PHP 提供了许多访问 cookie 的方法。最简单的方法是使用 $_COOKIE 或 $HTTP_COOKIE_VARS 变量。以下示例将访问上述示例中设置的所有 Cookie。
您可以使用 isset() 函数来检查是否设置了 cookie。
删除 Cookie
要删除 Cookie,请将 Cookie 设置为已过期的日期,以便浏览器触发 Cookie 删除机制。
请看下面的例子 -
浏览器显示以下响应 -
您还可以通过在 cookie 名称中使用数组表示法来设置数组 cookie。
如果 cookie 名称包含点 ( . ),PHP 会用下划线 ( _ ) 替换它们。
尽管 cookie 概念背后的主要目的是帮助 Web 开发人员提供更个性化和便捷的用户体验,但它可能会对您的隐私和个人信息构成风险。
在某些情况下,应用程序可能会拒绝您不接受他们的 cookie 的完全访问权限。在这种情况下,建议定期从浏览器的缓存中清除与 cookie 相关的数据。