cookie的用途相信大家都知道了,有时我们的cgi需要记录读取某个来访者的信息,例如该来访者使用该用的情况,那就得用到cooike技术,下面就讨论一下如何用cgi来记录、读取来访者计算机中的cookie。
cookie在不同的浏览器上的存储方式是不同的,但这并不存在不兼容的问题,因为web服务器与浏览器之间是通过http响应头实现互相传送cookie的信息的,我们在读写cookie时不必理会其在客户端是怎么存储的。
在cgi向来访者的计算机中写入一条cookie时,cgi需要向浏览器发送一个响应头:
set-cookie:name1=value;name2=value2;exprires=date;path=path;domiam=domain_name;secure
现在逐个来解释以上响应头各项的含义,各项内容是用分号阁开的
我们看到 name1=value和name2=value2 就是你要设置的cookie的内容,它是以名字=值的方式发送的,而name=value中不可以有冒号、逗号、和空格,但可以用%xx代替,xx为一个16进制数;
exprires=date项是有关cookies的生存期,即该cookie的有效期,有效期的时间格式是格林威治时间格式:wdy,dd-mon-yyyy hh:mm:ss gmt
这一项在写入cooie时是可选的,但不设置的话浏览器与web服务器的一次连接结束后,cookie就过了有效期;
domian项定义哪些主机可以读取cookies,通常cookie存放的都不重要的信息,如果你要存放的的信息不大重要,这一项也不用设置;
path项是定义了一台主机上哪些www资源可以读取你所设置的cookie,如果path=/ 则这台主机上所有www资源可以读取你所设置的cookie;
secure是有关加密传送我们可不用理会。
如果你在一台支持cookie的客户端设置了cookie,当这个客户端在次来访问时,浏览器会向你的cgi所在的web服务器发送一条http响应头,这个响应头为:
cookie:name1=value;name2=value2;exprires=date;path=path;domiam=domain_name;secure
根据这个http响应头web服务器的环境变量 http_cookie=:name1=value;name2=value2
我们对这个环境变量的内容进行分解就可以的到我我们要的信息。
以下给出我写的读写cookie的两段perl程序,你也可以把它改写为c语言
设置cookie:
print "content-type:text/htmln";
print "set-cookie:name1=zjxyz;expires=thursdday,01-jan-2000 12:00:00 gmtn";
print "set-cookie:name2=ken;expires=thursdday,01-jan-2000 12:00:00 gmtn";
print "set-cookie:name3=ken;expires=thursdday,01-jan-2000 12:00:00 gmtnn";
读取cookie和分解的过程:
@pairs = split(/&/, $env{’http_cookie’});
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fa-f0-9][a-fa-f0-9])/pack("c", hex($1))/eg;
$cookie{$name} = $value;}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器