壹次网首页 | 工具源码首页 | 技术文章首页 | 文章分类 | | |

文章搜索: 分类 关键字
您的位置:首页网络编程CGI专区 → 在CGI中如何使用cookie
在CGI中如何使用cookie
添加日期:2006-11-6 8:45:13     [ ]
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";的头部输出语句,否则程序会报错

出处:论坛转载 作者:佚名 点击:
 热点文章
·photoshop制作香烟、烟头、烟雾
·photoshop图片卷角、翻页效果的制作
·用U盘或移动硬盘装《深山红叶袖珍系统Win PE启动..
·photoshop经典恐怖片海报效果教程
·ghost.pif最新变种手动查杀,ARP欺骗挂马+KAV让..
·photoshop制作3D立体小人和字体
·photoshop水晶球质感表现 - 关于光影的细节
·关于zend解密的程序
·王晨昀:谁来拯救中小网站?
·photoshop泛黄、陈旧纸张效果的制作
 推荐文章
·如何彻底删除一个不需要的系统服务
·模仿QQ和MSN消息提示的效果
·CC攻击的思路及防范方法
·广告联盟的一些评价
Powered by yici.net
CopyRight (C) 2006-2012 版权所有   [ 依次网 ];未经授权,任何人不得抄袭、仿冒本站
ICP备案:苏ICP备05011771号 证书下载 ICP证号:苏ICP证040301
仪征广目网络信息服务有限公司 版权所有