明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

對(duì)于CGI讀寫COOKIE的編程

[摘要]COOKIE的用途相信大家都知道了,有時(shí)我們的CGI需要記錄讀取某個(gè)來(lái)訪者的信息,例如該來(lái)訪者使用該用的情況,那就得用到COOIKE技術(shù),下面就討論一下如何用CGI來(lái)記錄、讀取來(lái)訪者計(jì)算機(jī)中的COOKIE。   COOKIE在不同的瀏覽器上的存儲(chǔ)方式是不同的,但這并不存在不兼容的問(wèn)題,因?yàn)閃EB...
COOKIE的用途相信大家都知道了,有時(shí)我們的CGI需要記錄讀取某個(gè)來(lái)訪者的信息,例如該來(lái)訪者使用該用的情況,那就得用到COOIKE技術(shù),下面就討論一下如何用CGI來(lái)記錄、讀取來(lái)訪者計(jì)算機(jī)中的COOKIE。 

  COOKIE在不同的瀏覽器上的存儲(chǔ)方式是不同的,但這并不存在不兼容的問(wèn)題,因?yàn)閃EB服務(wù)器與瀏覽器之間是通過(guò)HTTP響應(yīng)頭實(shí)現(xiàn)互相傳送COOKIE的信息的,我們?cè)谧x寫COOKIE時(shí)不必理會(huì)其在客戶端是怎么存儲(chǔ)的。 

  在CGI向來(lái)訪者的計(jì)算機(jī)中寫入一條COOKIE時(shí),CGI需要向?yàn)g覽器發(fā)送一個(gè)響應(yīng)頭: 

Set-Cookie:name1=value;name2=value2;exprires=DATE;PATH=PATH;domiam=DOMAIN_NAME;SECURE 

  現(xiàn)在逐個(gè)來(lái)解釋以上響應(yīng)頭各項(xiàng)的含義,各項(xiàng)內(nèi)容是用分號(hào)閣開(kāi)的 

  我們看到 name1=value和name2=value2 就是你要設(shè)置的COOKIE的內(nèi)容,它是以名字=值的方式發(fā)送的,而name=value中不可以有冒號(hào)、逗號(hào)、和空格,但可以用%XX代替,XX為一個(gè)16進(jìn)制數(shù); 

exprires=DATE項(xiàng)是有關(guān)COOKIES的生存期,即該COOKIE的有效期,有效期的時(shí)間格式是格林威治時(shí)間格式:wdy,DD-MON-YYYY HH:MM:SS GMT 
這一項(xiàng)在寫入COOIE時(shí)是可選的,但不設(shè)置的話瀏覽器與WEB服務(wù)器的一次連接結(jié)束后,COOKIE就過(guò)了有效期; 

domian項(xiàng)定義哪些主機(jī)可以讀取COOKIES,通常COOKIE存放的都不重要的信息,如果你要存放的的信息不大重要,這一項(xiàng)也不用設(shè)置; 

PATH項(xiàng)是定義了一臺(tái)主機(jī)上哪些WWW資源可以讀取你所設(shè)置的COOKIE,如果PATH=/ 則這臺(tái)主機(jī)上所有WWW資源可以讀取你所設(shè)置的COOKIE; 

SECURE是有關(guān)加密傳送我們可不用理會(huì)。 
如果你在一臺(tái)支持COOKIE的客戶端設(shè)置了COOKIE,當(dāng)這個(gè)客戶端在次來(lái)訪問(wèn)時(shí),瀏覽器會(huì)向你的CGI所在的WEB服務(wù)器發(fā)送一條HTTP響應(yīng)頭,這個(gè)響應(yīng)頭為: 
Cookie:name1=value;name2=value2;exprires=DATE;PATH=PATH;domiam=DOMAIN_NAME;SECURE 
根據(jù)這個(gè)HTTP響應(yīng)頭WEB服務(wù)器的環(huán)境變量 HTTP_COOKIE=:name1=value;name2=value2 
我們對(duì)這個(gè)環(huán)境變量的內(nèi)容進(jìn)行分解就可以的到我我們要的信息。 

  以下給出我寫的讀寫COOKIE的兩段PERL程序,你也可以把它改寫為C語(yǔ)言 

設(shè)置COOKIE: 

print "Content-type:text/htmln"; 
print "Set-Cookie:name1=zjxyz;expires=Thursdday,01-Jan-2000 12:00:00 GMTn"; 
print "Set-Cookie:name2=ken;expires=Thursdday,01-Jan-2000 12:00:00 GMTn"; 
print "Set-Cookie:name3=ken;expires=Thursdday,01-Jan-2000 12:00:00 GMTnn"; 

  讀取COOKIE和分解的過(guò)程: 

@pairs = split(/&/, $ENV{’HTTP_COOKIE’}); 
foreach $pair (@pairs){ 
($name, $value) = split(/=/, $pair); 
$value =~ tr/+/ /; 
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; 
$cookie{$name} = $value;}