Cookies是存储在客户端计算机上的文本文件,它们被保留用于跟踪客户端数据目的。 PHP透明地支持HTTP Cookie。
标识用户有三个步骤 -
- 服务器脚本向浏览器发送一组cookie。 例如姓名,年龄或身份证号码等
- 浏览器将此信息存储在本地计算机上供将来使用。
- 当下一次浏览器向Web服务器发送任何请求时,它将这些cookie信息发送到服务器,服务器使用该信息来识别用户。
本章将演示如何设置cookies,如何访问以及删除它们。
Cookie剖析
Cookie通常设置在HTTP头中(尽管JavaScript也可以直接在浏览器上设置cookie)。 设置cookie的PHP脚本可能会发送看起来像这样的头标 -
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2017 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=maxsu; expires=Friday, 04-Feb-17 22:03:38 GMT;
path=/; domain=yiibai.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=maxsu
PHP脚本将可以使用环境变量$_COOKIE
或$HTTP_COOKIE_VARS []
来访问cookie中值,其中包含所有的cookie名称和值。 上面的cookie可以使用$HTTP_COOKIE_VARS ['name']
或$_COOKIE['name']
进行访问。
使用PHP设置Cookie
PHP提供了setcookie()
函数来设置一个cookie。 这个函数最多有六个参数,应该在<html>
标签之前调用。对于每个cookie,这个函数必须单独调用。
setcookie(name, value, expire, path, domain, security);
下面是所有参数的说明 -
- name - 它是要设置的cookie的名称,并存储在名为
HTTP_COOKIE_VARS
的环境变量中。 访问cookie时使用这个变量。 - value - - 设置了命名变量的值,这是实际想要存储的内容。
- expire - 这指定自1970年1月1日00:00:00 GMT以后的秒数以后的未来时间。在此时间之后,cookie将变为不可访问。 如果这个参数没有设置,那么当Web浏览器关闭时,cookie会自动失效。
- path - 指定了cookie有效的目录。一个正斜杠(
/
)字符允许cookie对所有目录有效。 - domain - 可以用来在非常大的域中指定域名,并且必须至少包含两个有效的句点。 所有cookie只对创建它们的主机和域有效。
- security - 可以设置为
1
来指定cookie只能通过使用HTTPS的安全传输发送,否则设置为0
,表示Cookie可以通过普通的HTTP发送。
下面的例子将创建两个cookie:name
和age
,这些cookie将在一小时后过期。
<?php
setcookie("name", "Maxsu", time()+3600, "/","", 0);
setcookie("age", "26", 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 />";
/* 也相当于使用 */
echo $HTTP_COOKIE_VARS["name"]. "<br />";
echo $_COOKIE["age"] . "<br />";
/* 也相当于使用 */
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,应该只用名称参数来调用setcookie()
,但是这并不总是有效,不应该依赖或经常使用。
将cookie设置为已经过期的日期是最安全的 -
<?php
setcookie( "name", "", time()- 60, "/","", 0);
setcookie( "age", "", time()- 60, "/","", 0);
?>
如上面代码中,将两个cookies:name
和age
设置为过期,即这两个Cookie将不在存在了。