9.1 Cookie
Cookie是在HTTP下,服务器或脚本可以维护客户端信息的一种方式。Cookie是Web服务器保存在用户浏览器上的“小甜饼”(一个很小的文本文件),通过它可以包含有关用户的信息,常用于保存用户名、密码,个性化设置,个人偏好记录等。
9.1.1 Cookie的优缺点
当用户访问服务器时,服务器可以设置和访问Cookie的信息。Cookie保存在客户端,通常是IE或Firefox浏览器的Cookie临时文件夹中,可以手动删除。注意:如果浏览器上Cookie太多,超过了系统所允许的范围,浏览器也会自动对它进行删除。Cookie的优缺点如下所示。
1.优点
(1)Cookie默认的生命周期起始于浏览器开始运行时,结束于浏览器终止运行时,此时的Cookie是存放在客户端的内存,但也可以设置Cookie的生命周期(通常以秒为单位),将它写入客户端的磁盘,这样就不必担心Cookie自动消失而遗漏某些信息。
(2)Cookie存放在客户端的内存或磁盘,不会占用Web服务器资源。
(3)Cookie可以记录浏览用户的个人信息,如此一来,网站的制作者就可以根据Cookie的信息来了解浏览者。
2.缺点
(1)如果遇到不支持Cookie的浏览器,或浏览用户禁止Web服务器在客户端写入Cookie,那么Cookie就不能发挥它的作用了。
(2)Cookie存放在客户端,可能会被浏览用户删除或拒绝写入。
(3)Cookie可能会形成安全上的威胁,导致个人信息被窃取。
9.1.2 Cookie的使用
当客户访问某个基于PHP技术的网站时,在PHP中可以使用setcookie()函数生成一个Cookie,系统经处理把这个Cookie发送到客户端并保存在C:\Documents and Settings\用户名\Cookies目录下。Cookie是HTTP标头的一部分,因此setcookie()函数必须在HTML本身的任何内容送到浏览器之前调用。这种限制与header()函数一样。当客户再次访问该网站时,浏览器会自动把C:\Documents and Settings\用户名\Cookies目录下与该站点对应的Cookie发送到服务器,服务器则把从客户端传来的Cookie自动地转化成一个PHP变量。在PHP 5中,客户端发来的Cookie将被转换成全局变量。可以通过$_COOKIE['xxx']读取。接下来分别介绍Cookie的相关操作。
1.创建Cookie
创建Cookie通过setcookie()函数。setcookie()函数向客户端发送一个HTTP Cookie。Cookie是由服务器发送到浏览器的变量。Cookie通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个Cookie。setcookie()函数定义如下。
setcookie(name,value,expire,path,domain,secure)
(1)name参数必需。规定Cookie的名称。
(2)value参数必需。规定Cookie的值。
(3)expire参数可选。规定Cookie的有效期。
(4)path参数可选。规定Cookie的服务器路径。
(5)domain参数可选。规定Cookie的域名。
(6)secure参数可选。规定是否通过安全的HTTPS连接来传输Cookie。
注意:有有效期的Cookie保存在客户端硬盘上,没有有效期只保存在客户端的内存。
例9-1 设置Cookie有效期。
<?php $value = 'something from somewhere'; setcookie("TestCookiexyq", $value); setcookie("TestCookie", $value, time()+3600); /* expire in 1 hour C:\Users\xyq\AppData\Roaming\Microsoft\Windows\Cookies\Low*/ setcookie("TestCookietwo", "hello ", time()+3600, "/"); setcookie("TestCookiethree", $value, time()+3600, "/", "www. example.com", 1);//在IE中域名值设置错误,引起Cookie设置无效 ?>
运行效果如图9-1所示。
2.访问Cookie
可以通过$_COOKIE变量访问Cookie,这是PHP内置的全局数组,以下代码首先创建一个Cookie,然后访问Cookie。
例9-2 设置并显示Cookie的内容。
<?php setcookie("mycookieone","xyq"); echo $_COOKIE["mycookieone"]; ?>
运行效果如图9-2所示。
注意:需刷新看到结果,因为服务器端每次访问的Cookie是每次请求头中发送给服务器端的。
3.删除Cookie
当用户频繁访问网站时,如果每次访问都添加Cookie,那么会使用户端产生不必要的临时文件,而且Cookie中存放这个人信息,用户的个人隐私受到威胁。这就要求在没有必要的情况下将过期的Cookie删除。删除Cookie的函数为setcookie。使用setcookie()函数删除Cookie,有以下两种方式
(1)调用只带有name参数及value参数值为空字符串的setcookie()。
例9-3 删除Cookie。
<?php setcookie("delcookie","hello"); echo $_COOKIE["delcookie"]; setcookie("delcookie",""); echo $_COOKIE["delcookie"]; ?>
运行效果如图9-3所示。
(2)使失效时间为time()或time-1,如例9-4所示。
例9-4 设置Cookie失效时间。
<?php setcookie("delcookie","hello",time()+3600); setcookie("delcookie","",time()-3600);//刚创建的Cookie没有对应的外 部文件 ?>