PHP - $_COOKIE 变量



PHP 超全局变量 $_COOKIEcookie 的形式存储传递给当前 PHP 脚本的变量以及 HTTP 请求。$HTTP_COOKIE_VARS 也包含相同的信息,但它不是超全局变量,现在已被弃用。

什么是 Cookie?

Cookie 是由服务器存储在客户端计算机上的文本文件,保留它们用于跟踪目的。PHP 透明地支持 HTTP CookieCookie 通常在 HTTP 标头中设置。JavaScript 还可以直接在浏览器上设置 Cookie

服务器脚本将一组 Cookie 发送到浏览器。它将此信息存储在本地计算机上以备将来使用。下次,当浏览器向 Web 服务器发送任何请求时,它会将这些 Cookie 信息发送到服务器,服务器使用该信息来识别用户。

setcookie() 函数

PHP 提供了 setcookie 函数来创建一个 cookie 对象,该对象将与 HTTP 响应一起发送到客户端。


setcookie(name, value, expire, path, domain, security);

参数

  • name - 存储的 Cookie 的名称。
  • value − 设置命名变量的值。
  • expire - 这指定了自 1970 年 1 月 1 日 00:00:00 GMT 以来的未来时间(以秒为单位)。
  • path - Cookie 有效的目录。
  • domain - 指定非常大的域中的域名。
  • security − 1 表示 HTTPS。对于常规 HTTP,默认值为 0。

如何设置 Cookie

请看下面的例子。此脚本会设置一个名为 username 的 Cookie(如果尚未设置)。


<?php
   if (isset($_COOKIE['username'])) {
      echo "<h2>Cookie username already set: " . $_COOKIE['username'] . "</h2>";
   } else {
      setcookie("username", "Mohan Kumar");
      echo "<h2>Cookie username is now set.</h2>";
   }
?>

从 Apache 服务器的文档根目录运行此脚本。您应该会看到此消息作为输出 -

Cookie username is now set

如果重新执行此脚本,则 Cookie 现在已设置。

Cookie username already set: Mohan Kumar

在客户端的后续访问中检索 Cookie -


<?php
   $arr=$_COOKIE;
   foreach ($arr as $key=>$val);
   echo "<h2>$key => $val </h2>";
?>

浏览器将显示以下输出 -

Username => Mohan Kumar

如何删除 Cookie

要删除 Cookie,请为 Cookie 设置已过期的日期,以便浏览器触发 Cookie 删除机制。


<?php
   setcookie("username", "", time() - 3600);
   echo "<h2>Cookie username is now removed</h2>";
?>

浏览器现在将显示以下输出 -

Cookie username is now removed

使用数组表示法设置 Cookie

您还可以通过在 cookie 名称中使用数组表示法来设置数组 cookie


setcookie("user[three]", "Guest");
setcookie("user[two]", "user");
setcookie("user[one]", "admin");

如果 cookie 名称包含点 (.),则 PHP 会用下划线 (_) 替换它们。