如有CGI编程的COOKIE技术应用

cgi格式  时间:2021-03-15  阅读:()

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。

CGI编程的COOKIE技术应用

我们在一些留言本、 BBS讨论区发贴时常会出现这种现象: 当进入发贴界面时在要求填写用户名和密码的地方就已经自动地填上了你的资料。这是什么会事呢?这是因为程序中引入了COOKIE技术的缘故。原来在你第一次登录时,程序就已在你的电脑中安装了一个COOKIE信息包,在你今后登陆时电脑就自动检索你的COOKIE并取出信息包的信息供程序调用, 因此出现上面所述的现象。COOKIE只不过是CGI程序要求浏览器持有的一个信息包, 这个信息包能够由CGI程序在任何时候收回。每当CGI程序要求创立COOKIE时, COOKIE能够从服务器传送到浏览器所属的子目录下(一般是保存在C:\WINDOWS\Temporary InternetFiles的目录下,这个过程称为COOKIE的安装。

COOKIE的安装和读出一般都由一个CGI模块来完成,下面我就将此模块的原代码公布给大家,有了这个COOKIE模块我们在编写程序时如要应用COOKIE技术能够说易如反掌。cookie的语法:http cookie的发送是经过http头部来实现的,她早于文件的传递,头部set-cookie的语法如下:

Set-cookie:name=name;expires=date;path=path;domain=domain;securename=name:需要设置cookie的值(name不能使用” ; ”和", "号) ,有多个name值时用"; "分隔例如: name1=name1 ;name2=name2;name3=name3。expires=date: cookie的有效期限,格式: expires="Wdy,DD-Mon-YYYYHH:MM:SS"

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。path=path:设置cookie支持的路径,如果path是一个路径, 则cookie对这个目录下的所有文件及子目录生效,例如: path="/cgi-bin/",如果path是一个文件, 则cookie指对这个文件生效,例如: path="/cgi-bin/cookie.cgi"。domain=domain:对cookie生效的域名,例如: domain="gzdzw.51.net"secure:如果给出此标志,表示cookie只能经过SSL协议的https服务器来传递。cookie的接收是经过设置环境变量HTTP_COOKIE来实现的, CGI程序能够经过检索该变量获取cookie信息。

以下是一个cookie的模块, 能够为你编写程序带来方便

$Cookie_Exp_Date = ' ' ;#此处设置cookie的有效时间

$Cookie_Path = ' ' ;#此处设置cookie的有效路径,默认脚本存在的目录。$Cookie_Domain = ' ' ; #此处设置cookie的有效域名,默认脚本调用的域名。$Secure_Cookie = '0' ;

@Cookie_Encode_Chars= (' \%' , ' \+' , ' \; ' , ' \, ' , ' \=' , ' \&' , ' \:\: ' , ' \s' ) ;%Cookie_Encode_Chars = (' \%' , '%25' ,

' \&' , '%26' ,

' \:\: ' , '%3A%3A' ,

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。

' \s' , '+' ) ;#特殊字符的解码

@Cookie_Decode_Chars= (' \+' , ' \%3A\%3A' , ' \%26' , ' \%3D' , ' \%2C' , ' \%3B' ,' \%2B' , ' \%25' ) ;

%Cookie_Decode_Chars = (' \+' , ' ' ,

' \%3A\%3A' , ' : : ' ,

' \%26' , '&' ,

'

' \%25' , '%' ) ;#特殊字符的解码

#########获取cookie信息子程序#####################sub GetCookies {local (@ReturnCookies) = @_;local ($cookie_flag) = 0;local ($cookie, $value) ;if ($ENV{'HTTP_COOKIE' } ) {if ($ReturnCookies[0] ne ' ' ) {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;#调用转码函数}foreach $ReturnCookie (@ReturnCookies) {if ($ReturnCookie eq $cookie) {

$Cookies{$cookie} = $value;

$cookie_flag = "1";

}

}

}

}else {foreach (split(/; /, $ENV{'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信息子程序#######################sub SetSecureCookie {if ($_[0] =~ /^ [01]$/) {

$Secure_Cookie = $_[0] ;return 1 ;

}else {return 0;

}

}sub SetCookies {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 . ' ; ' ; }#设置有效域名if ($Secure_Cookie) { print ' secure' ; }print "\n";shift(@cookies) ; shift(@cookies) ;

}

}sub SetCompressedCookies {local ($cookie_name,@cookies) = @_;local ($cookie, $value, $cookie_value) ;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;

}if ($cookie_value) { $cookie_value .= '&' . $cookie . ' : : ' . $value; }else { $cookie_value = $cookie . ' : : ' . $value; }shift(@cookies) ; shift(@cookies) ;

}

&SetCookies("$cookie_name", "$cookie_value") ;

}sub GetCompressedCookies {local ($cookie_name,@ReturnCookies) = @_;local ($cookie_flag) = 0;local ($ReturnCookie, $cookie, $value) ;if (&GetCookies($cookie_name) ) {if ($ReturnCookies[0] ne ' ' ) {foreach (split(/&/, $Cookies{$cookie_name} ) ) {

($cookie, $value) = split(/: :/) ;foreach $char (@Cookie_Decode_Chars) {

$cookie =~ s/$char/$Cookie_Decode_Chars{$char}/g;

$value =~ s/$char/$Cookie_Decode_Chars{$char}/g;

}foreach $ReturnCookie (@ReturnCookies) {

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。if ($ReturnCookie eq $cookie) {

$Cookies{$cookie} = $value;

$cookie_flag = 1 ;

}

}

}

}else {foreach (split(/&/, $Cookies{$cookie_name} ) ) {

($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 ;

}delete($Cookies{$cookie_name} ) ;

}return $cookie_flag;

资料内容仅供您学习参考如有不当或者侵权请联系改正或者删除。}

########结束#################

下面是cookie信息包安装代码段

<SCRIPT LANGUAGE="JavaScript">

<!-- HIDEexpireDate = new Date;if (expireDate.getYear() < 100) {expireDate. setYear(expireDate.getYear() + 1900 + 1) ;} else {expireDate. setYear(expireDate.getYear()+1) ;

}var username = getCookie("UserName") ;var password = getCookie("Password") ;if (password == null) {var CookieName = "$username";var CookiePW = "$userpsd";if (password == null) {document.cookie = "username=" + CookieName + ";expires=" +expireDate. toGMTString() + ";";document.cookie = "password=" + CookiePW + ";expires=" +expireDate. toGMTString() + ";";

LOCVPS:VPS主机全场8折,德国/荷兰/美国KVM终身7折

LOCVPS发来了针对元旦新年的促销活动,除了全场VPS主机8折优惠外,针对德国/荷兰KVM #1/美国KVM#2 VPS提供终身7折优惠码(限量50名,先到先得)。LOCVPS是一家成立于2012年的国人VPS服务商,提供中国香港、韩国、美国、日本、新加坡、德国、荷兰、俄罗斯等地区VPS服务器,基于KVM或XEN架构(推荐优先选择KVM),均选择直连或者优化线路,国内延迟低,适合建站或远程办公使...

HostWebis:美国/法国便宜服务器,100Mbps不限流量,高配置大硬盘,$44/月起

hostwebis怎么样?hostwebis昨天在webhosting发布了几款美国高配置大硬盘机器,但报价需要联系客服。看了下该商家的其它产品,发现几款美国服务器、法国服务器还比较实惠,100Mbps不限流量,高配置大硬盘,$44/月起,有兴趣的可以关注一下。HostWebis是一家国外主机品牌,官网宣称1998年就成立了,根据目标市场的不同,以不同品牌名称提供网络托管服务。2003年,通过与W...

搬瓦工(季付46.7美元)新增荷兰(联通线路)VPS,2.5-10Gbps

搬瓦工最近新增了荷兰机房中国联通(AS9929、AS4837)线路的VPS产品,选项为NL - China Unicom Amsterdam(ENUL_9),与日本软银和洛杉矶(DC06)CN2 GIA配置一致可以互换,属于高端系列,2.5Gbps-10Gbps大带宽,最低季付46.7美元起。搬瓦工VPS隶属于老牌IT7公司旗下,主要提供基于KVM架构VPS主机,数据中心包括美国洛杉矶、凤凰城、纽...

cgi格式为你推荐
京沪高铁上市首秀京沪高铁怎么老是出问题?高铁的核心技术是中国自己的吗?firetrap我发现好多外贸店都卖其乐的原单,有怎么多原单吗同ip域名同IP网站具体是什么意思,能换独立的吗www.haole012.com012qq.com真的假的javmoo.comjavbus上不去.怎么办www.niuav.com给我个看电影的网站百度指数词什么是百度指数avtt4.comwww.5c5c.com怎么进入yinrentangzimotang氨基酸洗发水的功效咋样?19ise.com欲火难耐看什么电影 19部性感至极的佳片
私服服务器租用 独享100m a2hosting 星星海 网站被封 腾讯实名认证中心 qq对话框 idc查询 paypal注册教程 免费私人服务器 无限流量 google台湾 1元域名 后门 宿迁服务器 中国电信宽带测速 双十二促销 cpu使用率过高怎么办 带宽测速 asp.net虚拟主机 更多