在jsp頁面的js中使用Cookie的原理介紹以及相應方法的代碼


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 }        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM