PHP-Cookie


Cookie 是存储在客户端计算机上的文本文件,用于跟踪使用情况。PHP 透明地支持 HTTP cookie。

识别回访用户涉及三个步骤 -

  • 服务器脚本向浏览器发送一组 cookie。例如姓名、年龄或身份证号码等。

  • 浏览器将此信息存储在本地计算机上以供将来使用。

  • 当下次浏览器向 Web 服务器发送任何请求时,它会将这些 Cookie 信息发送到服务器,服务器使用该信息来识别用户。

本章将教您如何设置cookie、如何访问它们以及如何删除它们。

cookie的解剖

Cookie 通常设置在 HTTP 标头中(尽管 JavaScript 也可以直接在浏览器上设置 Cookie)。设置 cookie 的 PHP 脚本可能会发送如下所示的标头 -

HTTP/1.1 200 OK
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=tutorialspoint.com
Connection: close
Content-Type: text/html

如您所见,Set-Cookie 标头包含名称值对、GMT 日期、路径和域。名称和值将进行 URL 编码。过期字段指示浏览器在给定的时间和日期之后“忘记”cookie。

如果浏览器配置为存储 cookie,它将保留此信息直至到期日期。如果用户将浏览器指向与 cookie 的路径和域匹配的任何页面,它会将 cookie 重新发送到服务器。浏览器的标头可能如下所示 -

GET / HTTP/1.0
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: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

然后,PHP 脚本将可以访问环境变量 $_COOKIE 或 $HTTP_COOKIE_VARS[] 中的 cookie,其中保存了所有 cookie 名称和值。可以使用 $HTTP_COOKIE_VARS["name"] 访问上述 cookie。

使用 PHP 设置 Cookie

PHP 提供了setcookie()函数来设置 cookie。此函数最多需要六个参数,并且应在 <html> 标记之前调用。对于每个 cookie,必须单独调用此函数。

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

这是所有参数的详细信息 -

  • 名称- 设置 cookie 的名称并存储在名为 HTTP_COOKIE_VARS 的环境变量中。该变量在访问 cookie 时使用。

  • - 设置命名变量的值,并且是您实际想要存储的内容。

  • 到期- 这指定了自 1970 年 1 月 1 日 00:00:00 GMT 起的未来时间(以秒为单位)。在此时间之后 cookie 将无法访问。如果未设置此参数,则当 Web 浏览器关闭时 cookie 将自动过期。

  • 路径- 这指定 cookie 有效的目录。单个正斜杠字符允许 cookie 对所有目录都有效。

  • - 这可用于指定非常大的域中的域名,并且必须包含至少两个句点才有效。所有 cookie 仅对创建它们的主机和域有效。

  • 安全性- 可以将其设置为 1,以指定 cookie 只能通过使用 HTTPS 的安全传输来发送,否则设置为 0,这意味着 cookie 可以通过常规 HTTP 发送。

以下示例将创建两个 cookie名称年龄,这些 cookie 将在一小时后过期。

<?php
   setcookie("name", "John Watkin", time()+3600, "/","", 0);
   setcookie("age", "36", time()+3600, "/", "",  0);
?>
<html>
   
   <head>
      <title>Setting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Set Cookies"?>
   </body>
   
</html>

使用 PHP 访问 Cookie

PHP 提供了多种访问 cookie 的方法。最简单的方法是使用 $_COOKIE 或 $HTTP_COOKIE_VARS 变量。以下示例将访问上例中设置的所有 cookie。

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         echo $_COOKIE["name"]. "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["name"]. "<br />";
         
         echo $_COOKIE["age"] . "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["age"] . "<br />";
      ?>
      
   </body>
</html>

您可以使用isset()函数来检查 cookie 是否已设置。

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         if( isset($_COOKIE["name"]))
            echo "Welcome " . $_COOKIE["name"] . "<br />";
         
         else
            echo "Sorry... Not recognized" . "<br />";
      ?>
      
   </body>
</html>

使用 PHP 删除 Cookie

正式地,要删除 cookie,您应该仅使用 name 参数调用 setcookie(),但这并不总是能很好地工作,但是,不应依赖它。

将 cookie 设置为已过期的日期是最安全的 -

<?php
   setcookie( "name", "", time()- 60, "/","", 0);
   setcookie( "age", "", time()- 60, "/","", 0);
?>
<html>
   
   <head>
      <title>Deleting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Deleted Cookies" ?>
   </body>
   
</html>