1. 程式人生 > 實用技巧 >儲存(cookie、localStorage、sessionStorage)

儲存(cookie、localStorage、sessionStorage)

cookie

什麼是cookie

cookie實際上就是一些資訊,這些資訊以檔案的形式儲存在客戶端計算機上。當用戶訪問了某個網站,可以通過cookie向訪問者電腦上儲存資料。

cookie的作用

在瀏覽器中進行資料的儲存,使用者名稱、密碼(儲存資訊,並與伺服器互動)

cookie的特性

1.必須執行在伺服器的環境下(開啟伺服器)

2.cookie的容量: 5kb

3.cookie儲存的資料型別: 字串

4.cookie存放以域名形式區分的:一個域名下存放的cookie的個數是有限制的,不同瀏覽器存放的個數不一樣,cookie能儲存的條目數為:50條。

5.Cookie預設是臨時儲存的,當瀏覽器關閉時,自動銷燬:如果想長時間存放一個cookie,同時需要設定一個過期時間。

cookie的缺點

1.cookie可能被禁用:當用戶非常注重個人隱私保護時,他很可能禁用瀏覽器的cookie功能;

2.cookie是與瀏覽器相關的:這意味著即使訪問的是同一個頁面,不同瀏覽器之間所儲存的cookie也是不能互相訪問的;

3.cookie可能被刪除:因為每個cookie都是硬碟上的一個檔案,因此很有可能被使用者刪除;

4.cookie安全性不夠高:所有的cookie都是以純文字的形式記錄於檔案中,因此如果要儲存使用者名稱密碼等資訊時,最好事先經過加密處理。

建立與獲取cookie
//設定和讀取cookie
document.cookie = "username=value";//獲取cookie檔案的內容
//事實上cookie檔案中存放的就是一個字串,而這個字串包含了當前網站目錄下的所有cookie的名字和值。因此,在獲取指定的cookie時,還需要使用String物件中的方法才能獲得需要的cookie值。
//cookie的生存期
document.cookie = "名稱=值;expires="+ 時間;
//(時間必須是一個字串)
​
var d= new Date();
d.setHours(d.getHours() + (24 * 30)); //儲存一個月
document.cookie = "visited=yes; expires=" + d.toUTCString();

Web Storage

可以讓 Web 頁面在客戶端瀏覽器中以鍵值對的形式在本地儲存資料。 這些資料可以是臨時的(瀏覽器一關就自動刪除),或者是長期存在的(無論多少天之後開啟網站,仍然可以訪問這些資料)

localStorage(window.localStorage)

本地儲存,用於持久化的本地儲存,除非主動刪除資料,否則資料是永遠不會過期的。

API
//在本地儲存中以key鍵/值的方式儲存資料
localStorage.setItem(“keyname”,value);
localStorage.keyname = value;
localStorage['keyname'] = value;
​
//獲取本地儲存的值
localStorage.getItem(“keyname”)
localStorage.keyname
localStorage['keyname']
​
//刪除指定key本地儲存的值
localStorage.removeItem(“keyname”);
//清空網站在本地儲存的所有的資料
localStorage.clear();

sessionStorage(window.sessionStorage)

會話儲存,用於本地儲存一個會話 (session)中的資料,這些資料當在關閉瀏覽器後資料也隨之銷燬。

localStorage、sessionStorage與cookie的區別

1.同源限制

cookie資料始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和伺服器間來回傳遞。而sessionStorage和localStorage不會自動把資料發給伺服器,僅在本地儲存。cookie資料還有路徑(path)的概念,可以限制cookie只屬於某個路徑下。

//如果兩個網頁一級域名相同,只是次級域名不同,瀏覽器允許通過設定document.domain共享 Cookie。(這種方法只適用於 Cookie 和 iframe 視窗,LocalStorage 和 IndexedDB 無法通過這種方法)
A:http://w1.example.com/a.html
B:http://w2.example.com/b.html
//那麼只要設定相同的document.domain,兩個網頁就可以共享 Cookie。因為瀏覽器通過document.domain屬性來檢查是否同源。
//A 和 B 兩個網頁都需要設定document.domain屬性,才能達到同源的目的。因為設定document.domain的同時,會把埠重置為null
// 兩個網頁都需要設定
document.domain = 'example.com';
//A網頁:設定cookie
document.cookie = "test1=hello";
//B網頁:讀取到A網頁的這個cookie
var allCookie = document.cookie;

通過window.postMessage,讀寫其他視窗的 LocalStorage 也成為了可能。

2.儲存大小

cookie資料不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合儲存很小的資料,如會話標識。sessionStorage和localStorage 雖然也有儲存大小的限制,但比cookie大得多,可以達到5M或更大。

3.有效期

sessionStorage:僅在當前瀏覽器視窗關閉前有效,自然也就不可能持久保持;localStorage:始終有效,視窗或瀏覽器關閉也一直儲存,因此用作持久資料;cookie只在設定的cookie過期時間之前一直有效,即使視窗或瀏覽器關閉。

4.作用域

sessionStorage不在不同的瀏覽器視窗中共享,即使是同一個頁面;localStorage 在所有同源視窗中都是共享的;cookie也是在所有同源視窗中都是共享的。

5.事件通知機制

Web Storage 支援事件通知機制,可以將資料更新的通知傳送給監聽者。

6.API

Web Storage 的 api 介面使用更方便。