Cookies

Cookies

Cookies 是存储在客户端计算机上的小块数据,通常作为文本形式存储。Cookies 通常用于存储少量数据,包括用户偏好、时间等。虽然 cookies 本身并不有害,但一些人出于隐私担忧不允许使用 cookies。在这种情况下,可以使用 Sessions(会话)。

Cookies 最早由 Netscape 引入。PHP 提供了简单的设置和获取 Cookies 的方法。

设置 Cookies

使用 setcookie() 设置 Cookie 非常简单。

语法:

bool setcookie ( string $name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure ]]]]])

其中:

  • name:Cookie 的名称。
  • value:Cookie 中包含的数据。
  • expire:Cookie 的过期时间(时间戳格式),表示 cookie 应该在多长时间后过期。
  • path:服务器上可以使用该 cookie 的路径。
  • domain:设置子域的权限。
  • secure:如果设置为 true,则只有在安全连接(HTTPS)存在时才会传输该 cookie。

由于所有的 Cookies 都是通过 HTTP 头部发送的,因此你必须在页面的开始处设置任何 Cookie,代码应该在页面的其他代码之前。通常,只需要使用 namevalueexpire 参数。如果未设置 expire,则 cookie 会在客户端关闭浏览器时过期。

示例:

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

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

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

在此示例中,setcookie 函数带有四个参数(setcookie 还有一个可选的参数未使用)。其中,第一参数是 Cookie 的名称,第二参数是 Cookie 的内容,第三参数是 Cookie 的过期时间(以秒为单位,time() 返回当前时间,time()+60 表示 1 分钟后过期)。path(路径)参数可以省略,但它允许你轻松设置一个目录下的所有页面都可以访问的 Cookies,尽管通常不推荐使用此方法。

需要注意的是,由于 Cookies 是与 HTTP 头部一起发送的,因此代码必须位于页面顶部(即使在 DOCTYPE 声明之前)。否则,将会产生错误。

获取 Cookies 数据

如果服务器已经在用户的计算机上设置了 Cookie,用户的浏览器会在每次加载页面时将其发送到服务器。由服务器发送的每个 Cookie 的名称都存储在超全局数组 $_COOKIE 中。因此,在上面的示例中,可以通过 $_COOKIE['test'] 获取 Cookie 数据。为了访问 Cookie 中的数据,我们可以使用 explode() 函数。explode() 将字符串按指定的分隔符分割成数组。这就是为什么在设置 Cookie 内容时,我们使用了连字符(-)作为分隔符。因此,要从 Cookie 中检索并显示 PHP 的完整形式,可以使用以下代码:

$array = explode("-", $_COOKIE['test']); // 获取 Cookie 内容
print("PHP stands for " . $array[0] . $array[1] . $array[2]); // 显示内容

注意: $_COOKIE 是从 PHP 4.1.0 引入的。在早期版本中,可以使用 $HTTP_COOKIE_VARS

Cookies 的应用

Cookies 通常用于以下情况:

  • 用户偏好设置
  • 商品清单
  • 测验或投票结果
  • 用户认证
  • 长时间保存数据

你永远不应在 Cookies 中存储未加密的密码,因为 Cookies 很容易被其他用户读取。

你也不应在 Cookies 中存储敏感数据,因为 Cookies 很容易被其他用户删除或修改。

参考资料

最后修改: 2025年01月9日 星期四 23:58