JS 詳解 Cookie、 LocalStorage 與 SessionStorage-轉載

記錄一下這些知識,有時候用到會忘記,對原文做者表達感謝。

附上原文連接:JS 詳解 Cookie、 LocalStorage 與 SessionStorage

基本概念

Cookie 是小甜餅的意思。顧名思義,cookie 確實很是小,它的大小限制爲4KB左右。它的主要用途有保存登陸信息,好比你登陸某個網站市場能夠看到「記住密碼」,這一般就是經過在 Cookie 中存入一段辨別用戶身份的數據來實現的。html

localStorage

localStorage 是 HTML5 標準中新加入的技術,它並非什麼劃時代的新東西。早在 IE 6 時代,就有一個叫 userData 的東西用於本地存儲,而當時考慮到瀏覽器兼容性,更通用的方案是使用 Flash。而現在,localStorage 被大多數瀏覽器所支持,若是你的網站須要支持 IE6+,那以 userData 做爲你的 polyfill 的方案是種不錯的選擇。前端

sessionStorage

sessionStorage 與 localStorage 的接口相似,但保存數據的生命週期與 localStorage 不一樣。作事後端開發的同窗應該知道 Session 這個詞的意思,直譯過來是「會話」。而 sessionStorage 是一個前端的概念,它只是能夠將一部分數據在當前會話中保存下來,刷新頁面數據依舊存在。但當頁面關閉後,sessionStorage 中的數據就會被清空。程序員

 

三者的異同

特性 Cookie localStorage sessionStorage
數據的生命期 通常由服務器生成,可設置失效時間。若是在瀏覽器端生成Cookie,默認是關閉瀏覽器後失效 除非被清除,不然永久保存 僅在當前會話下有效,關閉頁面或瀏覽器後被清除
存放數據大小 4K左右 通常爲5MB
與服務器端通訊 每次都會攜帶在HTTP頭中,若是使用cookie保存過多數據會帶來性能問題 僅在客戶端(即瀏覽器)中保存,不參與和服務器的通訊
易用性 須要程序員本身封裝,源生的Cookie接口不友好 源生接口能夠接受,亦可再次封裝來對Object和Array有更好的支持

應用場景

有了對上面這些差異的直觀理解,咱們就能夠討論三者的應用場景了。web

由於考慮到每一個 HTTP 請求都會帶着 Cookie 的信息,因此 Cookie 固然是能精簡就精簡啦,比較經常使用的一個應用場景就是判斷用戶是否登陸。針對登陸過的用戶,服務器端會在他登陸時往 Cookie 中插入一段加密過的惟一辨識單一用戶的辨識碼,下次只要讀取這個值就能夠判斷當前用戶是否登陸啦。曾經還使用 Cookie 來保存用戶在電商網站的購物車信息,現在有了 localStorage,彷佛在這個方面也能夠給 Cookie 放個假了~後端

而另外一方面 localStorage 接替了 Cookie 管理購物車的工做,同時也能勝任其餘一些工做。好比HTML5遊戲一般會產生一些本地數據,localStorage 也是很是適用的。若是遇到一些內容特別多的表單,爲了優化用戶體驗,咱們可能要把表單頁面拆分紅多個子頁面,而後按步驟引導用戶填寫。這時候 sessionStorage 的做用就發揮出來了。瀏覽器

 

安全性的考慮

須要注意的是,不是什麼數據都適合放在 Cookie、localStorage 和 sessionStorage 中的。使用它們的時候,須要時刻注意是否有代碼存在 XSS 注入的風險。由於只要打開控制檯,你就隨意修改它們的值,也就是說若是你的網站中有 XSS 的風險,它們就能對你的 localStorage 肆意妄爲。因此千萬不要用它們存儲你係統中的敏感數據。安全

 

localStorage和sessionStorage操做

localStorage和sessionStorage都具備相同的操做方法,例如setItem、getItem和removeItem等服務器

localStorage和sessionStorage的方法

setItem存儲value

用途:將value存儲到key字段
cookie

sessionStorage.setItem("key", "value");     localStorage.setItem("site", "js8.in");

getItem獲取value

用途:獲取指定key本地存儲的值session

var value = sessionStorage.getItem("key");     var site = localStorage.getItem("site");

removeItem刪除key

用途:刪除指定key本地存儲的值

sessionStorage.removeItem("key");     localStorage.removeItem("site");

clear清除全部的key/value

用途:清除全部的key/value

sessionStorage.clear();     localStorage.clear();

其餘操做方法:點操做和[ ]

web Storage不但能夠用自身的setItem,getItem等方便存取,也能夠像普通對象同樣用點(.)操做符,及[]的方式進行數據存儲,像以下的代碼:

var storage = window.localStorage; storage.key1 = "hello"; storage["key2"] = "world"; console.log(storage.key1); console.log(storage["key2"]);

localStorage和sessionStorage的key和length屬性實現遍歷

sessionStorage和localStorage提供的key()和length能夠方便的實現存儲的數據遍歷,例以下面的代碼:

複製代碼
var storage = window.localStorage;
for(var i=0, len=storage.length; i<len;i++){
    var key = storage.key(i);     
    var value = storage.getItem(key);     
    console.log(key + "=" + value); 
}
複製代碼
相關文章
相關標籤/搜索