📜  PHP-Cookies

📅  最后修改于: 2020-10-21 05:10:16             🧑  作者: Mango


Cookies是存储在客户端计算机上的文本文件,并且保留使用跟踪目的。 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编码。 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或$ HTTP_COOKIE_VARS []中的cookie。可以使用$ HTTP_COOKIE_VARS [“ name”]访问以上cookie。

用PHP设置Cookies

PHP提供了setcookie()函数来设置cookie。此函数最多需要六个参数,应在标记之前调用。对于每个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,以指定仅通过使用HTTPS的安全传输来发送cookie,否则设置为0,这意味着可以通过常规HTTP发送cookie。

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



   
   
      Setting Cookies with PHP
   
   
   
      
   
   

用PHP访问Cookies

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

Accessing Cookies with PHP
   
   
   
      
      ";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["name"]. "
"; echo $_COOKIE["age"] . "
"; /* is equivalent to */ echo $HTTP_COOKIE_VARS["age"] . "
"; ?>

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

Accessing Cookies with PHP
   
   
   
      
      ";
         
         else
            echo "Sorry... Not recognized" . "
"; ?>

用PHP删除Cookie

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

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



   
   
      Deleting Cookies with PHP