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

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

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

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

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

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

             現(xiàn)在大家已經(jīng)了解有關(guān)Cookie的一些基本概念了,讓我們更進(jìn)一步討論Cookie。可以用javascript來很方便地編寫函數(shù)用來創(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()用來讀取一個(gè)Cookie。當(dāng)一個(gè)Cookie的請求被客戶機(jī)收到時(shí),該客戶機(jī)查找它的cookies.txt文件以進(jìn)行匹配。這個(gè)函數(shù)首先匹配這個(gè)Cookie的名字。如果有多個(gè)同名的Cookie,它再匹配路徑。函數(shù)完成匹配后返回這個(gè)Cookie的值。如果客戶機(jī)中沒有這個(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) //沒有指定其他元素
                 endstr=documents.cookie.length;
               return unescape(documents.cookie.substring
                 (offset,endstr));
             }

             3.刪除Cookie

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


          posted on 2009-11-03 16:28 胡鵬 閱讀(334) 評論(0)  編輯  收藏 所屬分類: js,html,css

          導(dǎo)航

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

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 石屏县| 庆城县| 乐东| 安溪县| 铜陵市| 阿巴嘎旗| 佛坪县| 英山县| 合作市| 遵化市| 武穴市| 武冈市| 聂荣县| 体育| 普兰县| 塔城市| 乃东县| 麦盖提县| 宾川县| 白玉县| 新津县| 金寨县| 磐石市| 察雅县| 广东省| 友谊县| 会泽县| 万年县| 武功县| 政和县| 华亭县| 三门县| 灵武市| 通榆县| 孟村| 新巴尔虎左旗| 台南市| 鸡泽县| 合肥市| 砀山县| 兰考县|