如有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() + ";";

TabbyCloud周年庆&七夕节活动 美國INAP 香港CN2

TabbyCloud迎来一周岁的生日啦!在这一年里,感谢您包容我们的不足和缺点,在您的理解与建议下我们也在不断改变与成长。为庆祝TabbyCloud运营一周年和七夕节,TabbyCloud推出以下活动。TabbyCloud周年庆&七夕节活动官方网站:https://tabbycloud.com/香港CN2: https://tabbycloud.com/cart.php?gid=16购买链...

Hostinger 限时外贸美国主机活动 低至月12元且赠送1个COM域名

Hostinger 商家我们可能一些新用户不是太熟悉,因为我们很多新人用户都可能较多的直接从云服务器、独立服务器起步的。而Hostinger商家已经有将近十年的历史的商家,曾经主做低价虚拟主机,也是比较有知名度的,那时候也有接触过,不过一直没有过多的使用。这不这么多年过去,Hostinger商家一直比较稳妥的在运营,最近看到这个商家在改版UI后且产品上也在活动策划比较多。目前Hostinger在进...

Virmach:1核/512M1核M1核512M/夏季美国vps促销,年付$7.2,9月更换AMD平台

virmach怎么样?virmach家这几年非常火,从商家的黑五闪购开始,以超低的价格吸引了大批的国人客户,而且商家的机器还是非常稳定的,站长手里的4.75刀年付已经用了两年了,非常稳定,不过商家到国内的线路一般,目前商家新上了夏季优惠促销,价格低到发指,年付7.2美元起,商家反馈将在9月开始更换AMD+NVMe平台,这个消息从年初就有了,不过一直没有更换,目前这个时间也不确定是否准确。点击进入:...

cgi格式为你推荐
美国互联网瘫痪如果全球网络瘫痪3分钟会造成多少损失18comic.fun有什么好玩的网站关键字数据库:什么是关键字?关键字什么叫关键词lunwenjiancewritecheck论文检测准吗?rawtoolsRAW是什么衣服牌子rawtools照片上面的RAW是什么意思,为什么不能到PS中去编辑777k7.comwww.777tk.com.怎么打不 开www.228gg.comwww.a8tb.com这个网站该如何改善www.119mm.comwww.993mm+com精品集!
php空间租用 vps推荐 n点虚拟主机管理系统 如何申请免费域名 美国主机评测 java主机 56折 国外空间服务商 ubuntu更新源 搜狗12306抢票助手 云图标 中国特价网 河南m值兑换 paypal注册教程 常州联通宽带 ca187 腾讯总部在哪 备案空间 ledlamp 域名和主机 更多