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=CodingDict.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或$ HTTP_COOKIE_VARS[]中的cookie,该环境变量包含所有cookie名称和值。上面的cookie可以使用$ HTTP_COOKIE_VARS [“name”]进行访问。

使用PHP设置Cookie

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

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

这里是所有参数的细节 -

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

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

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

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

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

  • 安全性 - 可以将其设置为1,以指定仅应使用HTTPS通过安全传输发送Cookie,否则设置为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>