在JavaScript中操作Cookie

weixin_34377065發表於2010-10-05

    在Windows系統中,cookie通常是被儲存在C:\Documents and settings\使用者名稱\cookie目錄下(如果系統在C盤)。其實每個cookie實際上就是一個文字檔案,裡面是用來儲存一些字元資料,這些資料是有程式碼進行寫入不僅是JavaScript和任何服務端語言;還並能在先前寫入過的資訊以及網頁進行讀取,也就是說當我們在瀏覽網頁時,頁面中的JavaScript程式碼已經把這些資料寫入我們的電腦。當然這些資訊並不一定永遠存在瀏覽者的電腦中,每個Cookie都有自己的存在時間,這就是由程式碼進行控制的。

 

    在JavaScript中操作Cookie,只需新增一個Cookie對文件物件的Cookie屬性進賦值即可, 如:<script>            document.cookie = “msg”;      </script>

 

   這是很簡單的文件物件,但你在資料夾中是無法看見到這個Cookie檔案的,因為他的生命週期是在關閉瀏覽器後就會結束 ,所以系統沒有寫入本地硬碟中。這些都是由於Cookie的屬性所決定的。

 

   設定Cookie屬性並不是我們通過“.”來訪問的。是經過Cookie的本身有一堆屬性所組成的,這就是他們應用的字串(數字和應用的程式碼)。

 

   以下是常用的一些程式碼:   <script>      //過期時間一分鐘      var expiration = new Date (new Date(),getTime() +1*60000); (這是以程式碼的屬性時間來變數賦值)      document.cookie = "yyy;path=/;expires=" + expiration.toGMTString() </script>

 

在程式碼中含有3個屬性,包括正文、讀取路徑以及過期時件。它們以分號間隔並使用特定的“屬性=值”的格式來表示,出正文部分之外。除了path和expires外,Cookie還有其他一些屬性,JavaScript中的Cookie如圖表:

 

 image

 

1.expires 的過期時間用來控制一個Cookie的生命期,也就是它硬碟裡存在的時間。無論是寫入的時間還是指定的過期時間,它們都是來自於客戶機而不是伺服器,因為Cookie是存在於瀏覽者計算機上的。所以時間格式必須是標準的GMT格式,如上圖所示;現在以這種在當前時間的基礎上增加指定時間的方式來表達:

 

//過期時間。D阿特()建構函式接收毫秒單位的引數 var expiration = new date(new Date().gettime() + 1 * 60000);

 

如果不設定或者設定為早於當前的時間,那麼Cookie將不被寫入硬碟,因為他沒有被儲存 ,這宗特性可以用來刪除Cookie檔案.

 

2.path 的路徑用來指定頁面所能訪問Cookie最頂層的目錄,

 

E:/a.html

 

E:/sec/b.html

 

E:/sec/thr/c.html

 

換了在a.html中設定了path=/,那我們根據根的目錄所得a.html、b.html和c.html都可以通過document.cookie來讀取裡面的資訊,如果沒設定path=/E:/sec,那麼只有b.html和c.html能夠讀取到Cookie。(注意:上面的程式碼在IE中無法執行,只能通過file:///協議在FF或在Opera等瀏覽器中執行,主要是由於對Cookie本地路徑的問題。如果是使用IE進行不同的路徑的測試,則必須在伺服器端建立服務和訪問。

 

注意path中的大小寫,如果寫成這樣path=/e:/sec,那麼它就會變成另一個新的Cookie。

 

比如我們要寫如資訊,姓名、性別、年齡等?不會生成多個Cookie檔案,只會產生覆蓋原來的值。在同一頁面中設定兩次Cookie:

 

document.cookie ="xxx";

 

document.cookie ="yyy";

 

存取多個不同型別值在Cookie中的程式碼如:

 

<script>

 

       //我的姓名、性別、出生年齡 “ 方式一”

 

       document.cookie = "yyy;xxx;zzz;";

 

       //我的工作、出差時間、休息時間  “方式二”

 

       document.cookie = "yyy,xxx,zzz,";

 

</script>

 

使用設定“方式一”,系統通過分號來進行屬性的分割。對徵文屬性來說,它只是認第一個值,在程式碼中就是yyy,而xxx和zzz則被認為是非法屬性而忽略掉。

 

使用“方式二”沒有用分號來分割三個值,而是用逗號。系統會認為“yyy,xxx,zzz”是一個整體,都屬於正文屬性。都能被讀取到。

 

3.domain域名用來限定可以訪問Cookie的地域名地址。很多網站除了主域名外還會有很多二級域名,例如百度有www.baidu.comhi.baidu.commp3.baidu.commap.baidu.com 等,通過系統為了安全考慮,只允許每個域訪問自己建立的Cookie,如果是多個的域共享Cookie資訊,就必須更改Cookie的domain屬性了。如程式碼:

 

document.cookies = "yyy,xxx,zzz;domain=baidu.com";

 

現在這個Cookie就可以被百度的所有二級域中的頁面所共享,domain可以和path屬性一起限制Cookie的訪問。

 

4.secure 安全性可以幫助Cookie在傳遞的過程中進行加密。也就是說在本地硬碟中的Cookie是可以被開啟看到,程式碼如:document.cookie = "yyy,xxx,zzz;secure";

 

   設定安全屬性很簡單,只需要用分號隔開secure屬性就可以了,但是增加了secure屬性後的Cookie在普通的HTTP協議下再也無法讀取到了,因為它只是識別到HTTPS。(注意:HTTPS是HTTP的增強版本,也就是使用了SSL的HTTP。從而使用過的SSL便可以對傳輸的資訊進行加密)

相關文章