关于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/%()/pack("c", hex($1))/eg;
$cookie{$name} = $value;}
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn
