cookie概述: 在http协议一个很大的缺点就是不作用户身份的判断,这样给编程人员带来很大的不便, 而cookie功能的出现弥补了这个缺憾。 所有cookie就是在客户访问脚本的同时,通过客户的浏览器,在客户硬盘上写入纪录数据 ,当下次客户访问脚本时取回数据信息,从而达到身份判别的功能,cookie常用在密码判断中 cookie的语法: http cookie的发送是通过http头部来实现的,他早于文件的传递,头部set-cookie的语法如下: set-cookie:name=name;expires=date;path=path;domain=domain;secure name=name: 需要设置cookie的值(name不能使用“;”和","号),有多个name值时用";"分隔例如:name1=name1;name2=name2;name3=name3。
expires=date: cookie的有效期限,格式: expires="wdy,dd-mon-yyyy hh:mm:ss"
path=path: 设置cookie支持的路径,如果path是一个路径,则cookie对这个目录下的所有文件及子目录生效,例如: path="/cgi-bin/",如果path是一个文件,则cookie指对这个文件生效,例如:path="/cgi-bin/cookie.cgi"。
domain=domain: 对cookie生效的域名,例如:domain="www.chinalb.com"
secure: 如果给出此标志,表示cookie只能通过ssl协议的https服务器来传递。
cookie的接收是通过设置环境变量http_cookie来实现的,cgi程序可以通过检索该变量获取cookie信息。 cookie的模块: 以下是一个cookie的模块,可以为你编写程序带来方便 #########代码开始 ############################################################################### # http cookie library version 2.1 # # copyright 1996 matt wright mattw@worldwidemart.com # # created 07/14/96 last modified 12/23/96 # ############################################################################### $cookie_exp_date = 'thu, 31-dec-2050 23:00:00 gmt'; #此处设置cookie的有效时间 $cookie_path = ''; #此处设置cookie的有效路径,默认脚本存在的目录。 $cookie_domain=''; #此处设置cookie的有效域名,默认脚本调用的域名。
@cookie_encode_chars = ('%', '+', ';', ',', '=', '&', '::', 's'); %cookie_encode_chars = ('%', '%25', '+', '%2b', ';', '%3b', ',', '%2c', '=', '%3d', '&', '%26', '::', '%3a%3a', 's', '+'); # 特殊字符的解码
@cookie_decode_chars = ('+', '%3a%3a', '%26', '%3d', '%2c', '%3b', '%2b', '%25'); %cookie_decode_chars = ('+', ' ', '%3a%3a', '::', '%26', '&', '%3d', '=', '%2c', ',', '%3b', ';', '%2b', '+', '%25', '%'); # 特殊字符的解码 ###################################3
#获取cookie信息
############################################################################### # getcookies # ############################################################################### sub getcookies { local(@returncookies) = @_; local($cookie_flag) = 0; local($cookie,$value); if ($env{'http_cookie'}) { foreach (split(/; /,$env{'http_cookie'})) { #分割http_cookie变量的字符串 ($cookie,$value) = split(/=/); foreach $char (@cookie_decode_chars) { $cookie =~ s/$char/$cookie_decode_chars{$char}/g; #调用转码函数 $value =~ s/$char/$cookie_decode_chars{$char}/g; #调用转码函数 } $cookies{$cookie} = $value; } $cookie_flag = 1; } return $cookie_flag; }
# 设置cookie信息 ############################################################################### # setcookies # ############################################################################### sub setcookies { if ($headerdefine ne "true") { print "content-type: text/htmln"; # 浏览器头部信息开始 local(@cookies) = @_; local($cookie,$value,$char);
while( ($cookie,$value) = @cookies ) { foreach $char (@cookie_encode_chars) { $cookie =~ s/$char/$cookie_encode_chars{$char}/g; #调用转码函数 $value =~ s/$char/$cookie_encode_chars{$char}/g; #调用转码函数 } print 'set-cookie: ' . $cookie . '=' . $value . ';'; #设置cookie值 if ($cookie_exp_date) { print ' expires=' . $cookie_exp_date . ';'; #设置有效时间 } if ($cookie_path) { print ' path=' . $cookie_path . ';'; #设置有效路径 }
if ($cookie_domain){ print ' domain=' . $cookie_domain . ';'; #设置有效域名 } print "n"; #浏览器头部信息结束 shift(@cookies); shift(@cookies); } $headerdefine = "true"; } }
1; #return true
##########代码结束
模块的调用方法:
设置cookie: &setcookies('name', $name, 'pass', $pass); #设置name 和pass两个cookie值.
取cookie:
&getcookies; $name=$cookies{'name'}; $pass=$cookies{'pass'};
cookie使用的注意事项: 发送cookie时由于是通过http头发送的,而http头部只能发送一次,因此在使用cookie模快时不能再使用 print "content-type: text/htmlnn";的头部输出语句,否则程序会报错 |