1. 設置cookie
1.1 每個cookie都是一個名/值對,可以把下面這樣一個字符串賦值給document.cookie:
1 document.cookie="user_Id=828";
1.2 如果要一次存儲多個名/值對,可以使用分號加空格(; )隔開,例如:
1 document.cookie="user_Id=828; user_Name=hulk";
1.3 cookie的名或值中不能使用分號(;)、逗號(,)、等號(=)以及空格。在cookie的名中做到這點很容易,但要保存的值是不確定的。如何來存儲這些值呢?
方法是用escape()函數進行編碼,它能將一些特殊符號使用十六進制表示,例如空格將會編碼為“20%”,從而可以存儲於cookie值中,而且使用此種方案還可以避免中文亂碼的出現。例如:
1 document.cookie="str="+escape("I love you"); 2 //等價於: 3 document.cookie="str=I%20love%20you";
當使用escape()編碼后,在取出值以后需要使用unescape()進行解碼才能得到原來的cookie值,如果沒有空格和漢字應該可以直接顯示正確的值,具體遇到再試試吧。
1.4 Cookies就像一個大盒子,里面又有好多小盒子,如下例子,document.cookie相當於找到大盒子,name相當於將一個小盒子起個名字,name=value相當於將value放到名為name的小盒子中,可以同時存在多個名字不同的小盒子,如下寫法可以存多個值:
1 document.cookie="name=value"; 2 document.cookie="name1=value1"; 3 document.cookie="name2=value2"; 4 ...
1.5 如果要改變一個cookie的值,只需重新賦值,如下代碼這樣獲取到的Cookies值為"222",而不是"111"(獲取問題后面說)。:
1 document.cookie="user_Id=111"; 2 document.cookie="user_Id=222";
2. 獲取cookie的值
2.1 cookie的值可以由document.cookie直接獲得,寫法如下代碼所示,但是這將獲得以分號隔開的多個鍵/值對所組成的字符串,這些鍵/值對包括了該域名下的所有cookie,
1 var strCookie=document.cookie;//獲取該域名下所有Cookies 2 alert(strCookie);//彈窗顯示
2.2 如方法上方法中,雖然能獲取到的Cookie,但是用戶必須自己分析這個字符串,來獲取指定的cookie值,比較麻煩,這時有第二種方法,在最后有說明,也給出了代碼,簡單說就是設置個方法,直接調用,急用的朋友可以直接到最后看。
3. 給cookie設置終止日期
不設置終止時間的Cookies都屬於單會話cookie,即瀏覽器關閉后這些cookie將會被清除,因為會話cookie是存在內存中的。
在實際開發中,cookie常常需要長期保存,例如保存用戶登錄的狀態,記住密碼,頁面設置等信息。這可以用下面的選項來實現:
1 document.cookie="user_Id=111; expires=GMT_String";
其中GMT_String是以GMT格式表示的時間字符串,這條語句就是將userId這個cookie設置為GMT_String表示的過期時間,超過這個時間,cookie將會被自動刪除,訪問不到。例如:
如果要將cookie設置為10天后過期,可以這樣實現:
1 <script language="JavaScript" type="text/javascript"> 2 3 //獲取當前時間 4 5 var date=new Date(); 6 7 var expireDays=10; //將date設置為10天以后的時間 8 9 date.setTime(date.getTime()+expireDays*24*3600*1000); 10 /*將userId和userName兩個cookie設置為10天后過期*/ 11 12 document.cookie="user_Id=111;user_Name=escape(xiongda);expire="+date.toGMTString(); 13 14 </script>
4. 刪除cookie
cookies沒有直接刪除的語句(我沒找到,哪位大神知道求告知...),為了達到刪除指定cookie的方法,可以將其過期時間設定為一個過去的時間,例如:
1 <script language="JavaScript" type="text/javascript"> 2 //獲取當前時間 3 var date=new Date(); 4 //將date設置為過去的時間 5 date.setTime(date.getTime()-1000); 6 //將user_Id這個cookie刪除 7 document.cookie="user_Id=111; expire="+date.toGMTString(); 8 </script>
5. 指定可訪問cookie的路徑
默認情況下,如果在某個頁面創建了一個cookie,那么該頁面所在目錄中的其他頁面也可以訪問該cookie。如果這個目錄下還有子目錄,則在子目錄中也可以訪問。
例如在 www.xxxx.com/total/main.jsp 中所創建的cookie,可以被 www.xxxx.com/total 或 www.xxxx.com/total/some/c.jsp所訪問,但不能被www.xxxx.com/d.html訪問。
為了控制cookie可以訪問的目錄,需要使用path參數設置cookie,語法如下:
1 document.cookie="name=value; path=/total";
其中total表示可訪問cookie的目錄。例如:
1 document.cookie="user_Id=111; path=/page";
表示當前cookie僅能在page目錄下使用。
如果要使cookie在整個網站下可用,可以將cookie的path指定為根目錄,例如:
1 document.cookie="userId=111; path=/";
6. 指定可訪問cookie的主機名(這部分沒有親自實踐,一般不這樣用)
和路徑類似,主機名是指同一個域下的不同主機,例如:www.baidu.com和www.google.com就是兩個不同的主機名。默認情況下,一個主機中創建的cookie在另一個主機下是不能被訪問的,但可以通過domain參數來實現對其的控制,其語法格式為:
document.cookie="name=value;
domain=cookieDomain";
以google為例,要實現跨主機訪問,可以寫為:
1 document.cookie="name=value; 2 domain=.google.com";
這樣,所有google.com下的主機都可以訪問該cookie。
參考網上的例子,以及自己實踐所得,寫了一個獲取和存儲cookie的js方法,使用還是挺方便的,cookie是真的好用,由於js使用session比較麻煩,寫頁面還是cookie實用
主要參考這位道友的文章,修改了一些表述方式,掛上鏈接,大家可以做對比參考,鏈接:http://www.cnblogs.com/Jackie-sky/p/3672544.html
綜合示例:cookie設置較為復雜,但是使用頻率高,並具有一定的相似性。因此可以定義幾個函數來完成cookie的通用操作,從而實現代碼的復用。下面列出了常用的cookie操作及其函數實現,需要的朋友可以復制走,放到自己的項目就好了。
1 /*創建cookie 無屬性*/ 2 function SetCookie(name,value){//鍵/值 3 //默認傳值,不設置任何變量 4 document.cookie=name+"="+escape(value); 5 } 6 /*創建cookie 設置訪問路徑*/ 7 function SetCookiePath(name,value){//鍵/值 8 //將cookie設置為根目錄下的所有頁面可以訪問,具體項目可以自己更改 9 document.cookie=name+"="+escape(value)+";path=/"; 10 } 11 12 /*創建cookie 設置失效時間*/ 13 function SetCookieTime(name,value,expireHours){//鍵/值/時間(天) 14 var cookieString=name+"="+escape(value); 15 var date=new Date(); 16 date.setTime(date.getTime+expireHours*24*60*60*1000); 17 cookieString=cookieString+";expire="+date.toGMTString(); 18 document.cookie=cookieString; 19 } 20 21 /*創建cookie 同時設置訪問路徑和失效時間*/ 22 function SetCookieTimePath(name,value,expireHours){//鍵/值/時間(天) 23 //將cookie設置為根目錄下的所有頁面可以訪問,並且有時間限制,具體項目可以自己更改 24 var cookieString=name+"="+escape(value); 25 var date=new Date(); 26 date.setTime(date.getTime+expireHours*24*60*60*1000); 27 cookieString=cookieString+";expire="+date.toGMTString(); 28 cookieString=cookieString+";path=/"//具體項目可更改path值 29 document.cookie=cookieString; 30 } 31 /*根據cookie的鍵查詢cookie*/ 32 function GetCookie(name){//要查詢的鍵 33 var arr,reg=new RegExp("(^|)"+name+"=([^;]*)(;|$)"); 34 if(arr=document.cookie.match(reg)) 35 return unescape(arr[2]); 36 else 37 return null; 38 } 39 40 /*根據cookie的鍵刪除cookie*/ 41 function DeleteCookie(name){//要刪除的鍵名 42 var date=new Date(); 43 date.setTime(date.getTime()-10000); 44 document.cookie=name+"=v; expire="+date.toGMTString(); 45 }