赞助广告 赞助广告
  当前位置:网络学院程序设计C/C++/VC → 在CGI中如何使用cookie
在CGI中如何使用cookie
日期:2001年7月17日 作者:不详 人气: 查看:[大字体 中字体 小字体]
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";的头部输出语句,否则程序会报错

(出处:不详 )

相关文章:
 
·ASP实现文件在线压缩和解压缩
·网际快车FlashGet使用技巧荟萃
·一个天气预报的小偷
·Are you ready?
·ASP简介
·ASP基础
·ASP脚本基础
·ASP脚本变量、函数、过程和条件语句
·乔客论坛惊暴UPfile严重漏洞!
·ASP脚本循环语句
相关软件:
 
·动感下载系统 2.0(access版)k170美化版带天空华军小偷
·风韵设计综合娱乐网 v4.0 功能增强完美版
·Boai BLBS V1000
·Boai BLBS V3.3
·中国龙BlogVer 1.1.0MX版
·中国大学生设计网 全站程序第三版
·518主机域名在线管理平台 v1.5
·Zend StudioClient V3.5.1 特别版
·Zend Studio Client for Linux V3.5.1 特别版
·PHP v4.3.9 RC1
  特别推荐
  热点TOP10