什么是Cookie(轉(zhuǎn))

             Cookie是在Web上用于存儲(chǔ)客戶(hù)系統(tǒng)信息的對(duì)象。所有的信息都以每行一個(gè)Cookie的形式存放在客戶(hù)端的一個(gè)名為cookies.txt的文件里。Cookie在HTTP頭標(biāo)(客戶(hù)和服務(wù)器用來(lái)標(biāo)識(shí)自身的分組)中在客戶(hù)機(jī)與服務(wù)器之間傳輸。

             Cookie由某個(gè)WWW網(wǎng)頁(yè)在某客戶(hù)機(jī)上進(jìn)行設(shè)置。比如,某個(gè)WWW網(wǎng)頁(yè)已在一個(gè)用戶(hù)的計(jì)算機(jī)上設(shè)置了一個(gè)Cookie,其中存儲(chǔ)的信息是該用戶(hù)的身份號(hào)(隨機(jī)賦予該用戶(hù)的唯一標(biāo)識(shí)),當(dāng)該用戶(hù)的瀏覽器連接該WWW站點(diǎn)時(shí),站點(diǎn)要求瀏覽器將Cookie送回,他的身份號(hào)就通過(guò)Cookie 傳遞給該網(wǎng)頁(yè)所在的WWW服務(wù)器。服務(wù)器上的一個(gè)CGI程序查找一個(gè)服務(wù)器端的文件以確定關(guān)于他的預(yù)設(shè)內(nèi)容。

             當(dāng)某個(gè)服務(wù)器在客戶(hù)的計(jì)算機(jī)上設(shè)置Cookie后,請(qǐng)注意如果要讓Cookie信息確實(shí)寫(xiě)入文件,必須關(guān)閉瀏覽器。在瀏覽器未關(guān)閉之前,任何新的或變化的Cookie都存放在內(nèi)存中。

          二、Cookie的特性
             每個(gè)Cookie包含有6個(gè)元素,常用的有:name、value、expires、domain和secure。這些元素存放了這個(gè)Cookie的作用范圍及實(shí)際的數(shù)據(jù)。
             1.name  這是每一個(gè)Cookie必須有的元素,它是該Cookie的名字。name元素是一個(gè)不含分號(hào)、逗號(hào)和空格的字符串。其命名方式與變量命名相同。
             2.value  value也是每個(gè)Cookie必須有的元素,它是該Cookie的值。value元素是實(shí)際存放于Cookie中的信息。它是由任何字符構(gòu)成的字符串。
             3.expires  expires是一個(gè)Cookie的過(guò)期時(shí)間。沒(méi)有設(shè)置expires元素的Cookie在用戶(hù)斷開(kāi)連接后過(guò)期,但在用戶(hù)關(guān)閉瀏覽器之前Cookie依然存在。
             Cookie有一個(gè)過(guò)期時(shí)間并等于它會(huì)從Cookie.txt文件中被刪除。在它的位置被用來(lái)存放另一個(gè)Cookie前,它依然存在著。過(guò)期的Cookie只是不被送往要求使用它的服務(wù)器。
             expire是一個(gè)串,它的形式如下:
             Wdy, DD-Mon-YY HH:MM:SS GMT
             expires元素是可選的。
             4.domain  domain是設(shè)置某個(gè)Cookie的Web網(wǎng)頁(yè)所在的計(jì)算機(jī)的域名。這樣,由一個(gè)站點(diǎn)創(chuàng)建的Cookie不會(huì)影響到另一個(gè)站點(diǎn)上的程序。對(duì)于較高層的域名如.com, .edu,或.mil,域名中至少有兩個(gè)分隔符(.)。而對(duì)于較低層的域名如.cn, .uk或.ca,域名中至少有3個(gè)分隔符。demain元素自動(dòng)地被設(shè)為網(wǎng)頁(yè)所在站點(diǎn)的基本域名。比如,你的網(wǎng)頁(yè)位于http://www.abc.com/~user,則該網(wǎng)頁(yè)創(chuàng)建的Cookie缺省地對(duì)域abc.com有效。如果你希望你的Cookie 只應(yīng)用于服務(wù)器www3.abc.com,那么你必須在設(shè)置Cookie的時(shí)候指定。
             只有擁有域名的站點(diǎn)才能為那個(gè)域名設(shè)置Cookie
             5.path  一個(gè)Cookie可以被指定為只針對(duì)一個(gè)站點(diǎn)的某一層次。如果一個(gè)Web站點(diǎn)要區(qū)分已注冊(cè)的和未注冊(cè)的客戶(hù),就可以為已經(jīng)注冊(cè)的客戶(hù)設(shè)置Cookie,當(dāng)注冊(cè)過(guò)的客戶(hù)訪問(wèn)該站點(diǎn)時(shí),他就可以訪問(wèn)到只對(duì)注冊(cè)客戶(hù)有效的頁(yè)面。path是可選項(xiàng),如果沒(méi)有指定path,將被缺省地設(shè)置為設(shè)置Cookie的頁(yè)面的路徑。
             6.secure標(biāo)志  secure是一個(gè)布爾值(真或假)。它的缺省值為假。如果它被設(shè)為真值, 這個(gè)Cookie只被瀏覽器認(rèn)為是安全的服務(wù)器所記住。

          三、關(guān)于Cookie的一些限制

             一個(gè)站點(diǎn)能為一個(gè)單獨(dú)的客戶(hù)最多設(shè)置20個(gè)Cookie。如果一個(gè)站點(diǎn)有兩個(gè)服務(wù)器(如www.abc.com和www3.abc.com)但沒(méi)有指定域名,Cookie的域名缺省地是abc.com。如果指定了確切的服務(wù)器地址,則每個(gè)站點(diǎn)可以設(shè)置20個(gè)Cookie--而不是總共20個(gè)。不僅每個(gè)服務(wù)器能設(shè)置的Cookie數(shù)目是有限的,而且每個(gè)客戶(hù)機(jī)最多只能存儲(chǔ)300個(gè)Cookie。如果一個(gè)客戶(hù)機(jī)已有300個(gè)Cookie,并且一個(gè)站點(diǎn)在它上面又設(shè)置了一個(gè)新Cookie,那么,先前存在的某一個(gè)Cookie將被刪除。
             每個(gè)Cookie也有自身的限制。Cookie不得超過(guò)4KB(4096bytes),其中包括名字和其他信息。
          四、javascript和Cookie

             現(xiàn)在大家已經(jīng)了解有關(guān)Cookie的一些基本概念了,讓我們更進(jìn)一步討論Cookie。可以用javascript來(lái)很方便地編寫(xiě)函數(shù)用來(lái)創(chuàng)建、讀取和刪除Cookie。下面,我們就介紹這些函數(shù)

             1.創(chuàng)建Cookie

             我們要進(jìn)行的第一件事就是要?jiǎng)?chuàng)建一個(gè)Cookie。下面給出的SctCookie()函數(shù)將完成這一功能。
             function SetCookit (name, value) {
               var argv=SetCookie.arguments;
               var argc=SetCookie.arguments.length;
               var expires=(argc>2)?argv[2]: null;
               var path=(argc>3)? argv[3]: null;
               var domain=(argc>4)? argv[4]: null;
               var secure=(argc>5)? argv[5]: false;
               documents.cookie=name+"="+escape
                 (value)+
               ((expires==null)?"":(";expires="
                 +expires.toGMTString()))+
               ((path==null)?"":(";path="+path))+
               ((domain==null)?"":(";domain="+
                 domain))+
               ((secure==true)?";secure":"");
             }
             SetCookie()只要求傳遞被設(shè)置的Cookie的名字和值,但如果必要的話你可以設(shè)置其他4 個(gè)參數(shù)而不必改變這個(gè)函數(shù)。可選的參數(shù)必須用正確的次序使用。如果不想設(shè)置某個(gè)參數(shù), 必須設(shè)置一個(gè)空串。比如,如果我們創(chuàng)建的一個(gè)Cookie需要指定secure域,但不想設(shè)置expires, patb或domain,就可以像這樣調(diào)用SetCokie():  SetCookie("MyNewCookie","Myvalue" ,"",","tyue);
             2.讀取Cookie

             下面給出的函數(shù)GetCookie()用來(lái)讀取一個(gè)Cookie。當(dāng)一個(gè)Cookie的請(qǐng)求被客戶(hù)機(jī)收到時(shí),該客戶(hù)機(jī)查找它的cookies.txt文件以進(jìn)行匹配。這個(gè)函數(shù)首先匹配這個(gè)Cookie的名字。如果有多個(gè)同名的Cookie,它再匹配路徑。函數(shù)完成匹配后返回這個(gè)Cookie的值。如果客戶(hù)機(jī)中沒(méi)有這個(gè)Cookie,或者路徑不匹配,該函數(shù)返回一個(gè)NULL。
             function GetCookie(name) {
               var arg=name+ "=";
               var alen=arg.length;
               var clen=documents.cookie.length;
               var i=0;
               while (i<clen) {
                 var j=i+alen;
                 if(documents.cookie.substring(i,j)
                 ==arg)
                 return getCookieVal(j);
                 i=documents.cookie.indexOf("",i)+1;
                 if(i==0)break;
               }
               return null;
             }
             函數(shù)中使用了getCookieVal()函數(shù),它是GetCookie()函數(shù)的補(bǔ)充。getCookieVal()將C ookies.txt文件分解為片斷,并從一批Cookie中讀出正確的Cookie。該函數(shù)的實(shí)現(xiàn)如下:
             function getCookieVal(offset) {
               var endstr=documents.cookie.indexOf
                 (";",offset);
               if(endstr==-1) //沒(méi)有指定其他元素
                 endstr=documents.cookie.length;
               return unescape(documents.cookie.substring
                 (offset,endstr));
             }

             3.刪除Cookie

             刪除一個(gè)Cookie很簡(jiǎn)單,只需將它的過(guò)期時(shí)間設(shè)為NULL。當(dāng)用戶(hù)斷開(kāi)連接后,這個(gè)Cooki e就過(guò)期了(沒(méi)有過(guò)期時(shí)間的Cookie將在瀏覽器關(guān)閉時(shí)被刪除)。下面的函數(shù)DeleteCookie() 說(shuō)明了如何刪除一個(gè)
          Cookie:
             function DeleteCookie(name) {
               var exp=new Date();
               exp.setTime(exp.getTime()-1);
               //將exp設(shè)為已過(guò)期的時(shí)間
               var cval=GetCookie(name);
               documents.cookie=name+"="+cval+";
               expires="+exp.toGMTString();
             }


          posted on 2009-11-03 16:28 胡鵬 閱讀(328) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): js,html,css

          導(dǎo)航

          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          agile

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 韶山市| 忻州市| 庆元县| 静乐县| 韶山市| 紫云| 凉城县| 太仓市| 松阳县| 鄂托克旗| 清徐县| 明水县| 聂拉木县| 兴安县| 泗洪县| 独山县| 集安市| 仁化县| 芦溪县| 仙桃市| 乌拉特中旗| 东山县| 怀化市| 松原市| 定远县| 莲花县| 青州市| 徐闻县| 沈丘县| 潼南县| 汝城县| 贡嘎县| 防城港市| 独山县| 南阳市| 三明市| 时尚| 老河口市| 文成县| 华宁县| 郸城县|