Cookie是存储在客户端计算机上的文本文件,用于跟踪目的. PHP透明地支持HTTP cookie.
识别返回用户有三个步骤 :
服务器脚本向浏览器发送一组cookie.例如姓名,年龄或身份证号等.
浏览器将此信息存储在本地计算机上以备将来使用.
当下次浏览器向Web服务器发送任何请求时,它会将这些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提供 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的方法.最简单的方法是使用$ _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>
正式地,要删除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>