PHP - Cookies

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=IT屋.com
Connection: close
Content-Type: text/html

如您所见,Set- Cookie标头包含名称值对,GMT日期,路径和域.名称和值将进行URL编码. expires字段是指示浏览器在给定的时间和日期之后"忘记"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包含所有cookie名称和值的环境变量$ _COOKIE或$ HTTP_COOKIE_VARS [].可以使用$ 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以后的未来时间(秒).在此之后,cookie将无法访问.如果未设置此参数,那么当Web浏览器关闭时,cookie将自动过期.

  • 路径 : 这指定了cookie有效的目录.单个正斜杠字符允许cookie对所有目录有效.

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

  • 安全性 : 这可以设置为1以指定cookie只应通过使用HTTPS的安全传输发送,否则设置为0表示cookie可以通过常规HTTP发送.

以下示例将创建两个Cookie name age 这些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>