11.1 Cookie管理
视频讲解:光盘TMlx11Cookie管理.exe
Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie的使用很普遍,许多提供个人化服务的网站都是利用Cookie来区别不同用户,以显示与用户相应的内容,如web接口的免费E-mail网站,就需要用到Cookie。有效地使用Cookie可以轻松完成很多复杂任务。下面对Cookie的相关知识进行详细介绍。
11.1.1 了解Cookie
本节首先简单介绍Cookie是什么以及Cookie能做什么。希望读者通过本节的学习对Cookie有一个明确的认识。
1.什么是Cookie
Cookie是一种在远程浏览器端存储数据并以此来跟踪和识别用户的机制。简单地说,Cookie是Web服务器暂时存储在用户硬盘上的一个文本文件,并随后被Web浏览器读取。当用户再次访问Web网站时,网站通过读取Cookies文件记录这位访客的特定信息(如上次访问的位置、花费的时间、用户名和密码等),从而迅速做出响应,如在页面中不需要输入用户的ID和密码即可直接登录网站等。
文本文件的命令格式如下:
用户名@网站地址[数字].txt
举个简单的例子,如果用户的系统盘为C盘,操作系统为Windows 2000/XP/2003,当使用IE浏览器访问Web网站时,Web服务器会自动以上述命令格式生成相应的Cookies文本文件,并存储在用户硬盘的指定位置,如图11.1所示。
图11.1 Cookie文件的存储路径
注意
在Cookies文件夹下,每个Cookie文件都是一个简单而又普通的文本文件,而不是程序。Cookies中的内容大多都经过了加密处理,因此,表面看来只是一些字母和数字组合,而只有服务器的CGI处理程序才知道它们真正的含义。
2.Cookie的功能
Web服务器可以应用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookie常用于以下3个方面:
记录访客的某些信息。如可以利用Cookie记录用户访问网页的次数,或者记录访客曾经输入过的信息,另外,某些网站可以使用Cookie自动记录访客上次登录的用户名。
在页面之间传递变量。浏览器并不会保存当前页面上的任何变量信息,当页面被关闭时页面上的所有变量信息将随之消失。如果用户声明一个变量id=8,要把这个变量传递到另一个页面,可以把变量id以Cookie形式保存下来,然后在下一页通过读取该Cookie来获取变量的值。
将所查看的Internet页存储在Cookies临时文件夹中,可以提高以后浏览的速度。
注意
一般不要用Cookie保存数据集或其他大量数据。并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端计算机中,因此最好不要保存敏感的、未加密的数据,否则会影响网络的安全性。
11.1.2 创建Cookie
在PHP中通过setcookie()函数创建Cookie。在创建Cookie之前必须了解的是,Cookie是HTTP头标的组成部分,而头标必须在页面其他内容之前发送,它必须最先输出。若在setcookie()函数前输出一个HTML标记或echo语句,甚至一个空行都会导致程序出错。
语法格式如下:
bool setcookie(string name[, string value[, int expire[, string path[, string domain[, int secure]]]]])
setcookie()函数的参数说明如表11.1所示。
表11.1 setcookie()函数的参数说明
【例11.1】使用setcookie()函数创建Cookie,实例代码如下:(实例位置:光盘TMsl111)
<?php setcookie("TMCookie", 'www.mrbccd.com'); setcookie("TMCookie", 'www.mrbccd.com', time()+60); //设置Cookie有效时间为60秒 //设置有效时间为60秒,有效目录为“/tm/”,有效域名为mrbccd.com及其所有子域名 setcookie("TMCookie", 'www.mrbccd.com', time()+3600, "/tm/", ". mrbccd.com", 1); ?>
运行本例,在Cookies文件夹下会自动生成一个Cookie文件,名为administrator@1[1].txt, Cookie的有效期为60秒,在Cookie失效后,Cookies文件自动删除。
11.1.3 读取Cookie
在PHP中可以直接通过超级全局数组$_COOKIE[]来读取浏览器端的Cookie值。
【例11.2】使用print_r()函数读取Cookie变量,实例代码如下:(实例位置:光盘TMsl112)
<?php if(! isset($ COOKlE["visittime"])){ //检测Cookie文件是否存在,如果不存在 setcookie("visittime", date("y-m-d H:i:s")); //设置一个Cookie变量 echo"欢迎您第一次访问网站!"; //输出字符串 }else{ //如果Cookie存在 setcookie("visittime", date("y-m-d H:i:s"), time()+60); //设置保存Cookie失效时间的变量 echo"您上次访问网站的时间为:".$ COOKlE["visittime"]; //输出上次访问网站的时间 echo"<br>"; //输出回车符 } echo"您本次访问网站的时间为: ".date("y-m-d H:i:s"); //输出当前的访问时间 ?>
在上面的代码中,首先使用isset()函数检测Cookie文件是否存在,如果不存在,则使用setcookie()函数创建一个Cookie,并输出相应的字符串;如果Cookie文件存在,则使用setcookie()函数设置Cookie文件失效的时间,并输出用户上次访问网站的时间。最后在页面输出本次访问网站的当前时间。
首次运行本例,由于没有检测到Cookie文件,运行结果如图11.2所示。如果用户在Cookie设置到期时间(本例为60秒)前刷新或再次访问该例,运行结果如图11.3所示。
图11.2 第一次访问网页的运行结果
图11.3 刷新或再次访问本网页后的运行结果
注意
如果未设置Cookie的到期时间,则在关闭浏览器时自动删除Cookie数据。如果为Cookie设置了到期时间,浏览器将会记住Cookie数据,即使用户重启计算机,只要没到期,再访问网站时也会获得如图11.3所示的数据信息。
11.1.4 删除Cookie
当Cookie被创建后,如果没有设置它的失效时间,其Cookie文件会在关闭浏览器时被自动删除。如果要在关闭浏览器之前删除Cookie文件,方法有两种:一种是使用setcookie()函数删除,另一种是在浏览器中手动删除Cookie。下面分别进行介绍。
1.使用setcookie()函数删除Cookie
删除Cookie和创建Cookie的方式基本类似,删除Cookie也使用setcookie()函数。删除Cookie只需要将setcookie()函数中的第二个参数设置为空值,将第三个参数Cookie的过期时间设置为小于系统的当前时间即可。
例如,将Cookie的过期时间设置为当前时间减1秒,代码如下:
setcookie("name", "", time()-1);
在上面的代码中,time()函数返回以秒表示的当前时间戳,把过期时间减1秒就会得到过去的时间,从而删除Cookie。
注意
把过期时间设置为0,可以直接删除Cookie。
2.在浏览器中手动删除Cookie
在使用Cookie时,Cookie自动生成一个文本文件存储在IE浏览器的Cookies临时文件夹中。在浏览器中删除Cookie文件是非常便捷的方法。具体操作步骤如下:
启动IE浏览器,选择“工具”/“Internet选项”命令,打开“Internet选项”对话框,如图11.4所示。在“常规”选项卡中单击“删除Cookies”按钮,将弹出如图11.5所示的“删除Cookies”对话框,单击“确定”按钮,即可成功删除全部Cookie文件。
图11.4 “Internet选项”对话框
图11.5 “删除Cookies”对话框
11.1.5 Cookie的生命周期
如果Cookie不设定时间,就表示它的生命周期为浏览器会话的期间,只要关闭IE浏览器,Cookie就会自动消失。这种Cookie被称为会话Cookie,一般不保存在硬盘上,而是保存在内存中。
如果设置了过期时间,那么浏览器会把Cookie保存到硬盘中,再次打开IE浏览器时会依然有效,直到它的有效期超时。
虽然Cookie可以长期保存在客户端浏览器中,但也不是一成不变的。因为浏览器最多允许存储300个Cookie文件,而且每个Cookie文件支持最大容量为4KB;每个域名最多支持20个Cookie,如果达到限制时,浏览器会自动地随机删除Cookies。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。