cookie、localStorage和sessionStorage 三者之間的區別以及存儲、獲取、刪除等使用方式

寫在前面:

前端開發的時候,在網頁刷新的時候,全部數據都會被清空,這時候就要用到本地存儲的技術,前端本地存儲的方式有三種,分別是cookie,localstorage和sessionStorage ,這是你們都知道的。本文的主要內容就是針對這三者的存放、獲取,區別、應用場景。有須要的朋友能夠作一下參考,喜歡的能夠點波贊,或者關注一下,但願能夠幫到你們。html

本文首發於個人我的blog:obkoro1.com前端

使用方式:

不少文檔都是說了一大堆,後面用法都沒有說,先要學會怎麼用,否則後面的都是扯淡,因此這裏我先把使用方式弄出來。html5

cookie:

保存cookie值:git

var dataCookie='110';
    document.cookie = 'token' + "=" +dataCookie; 複製代碼

獲取指定名稱的cookie值程序員

function getCookie(name) { //獲取指定名稱的cookie值
// (^| )name=([^;]*)(;|$),match[0]爲與整個正則表達式匹配的字符串,match[i]爲正則表達式捕獲數組相匹配的數組;
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) {
  console.log(arr);
  return unescape(arr[2]);
}
return null;
}
 var cookieData=getCookie('token'); //cookie賦值給變量。複製代碼

先貼這兩個最基礎的方法,文末有個demo裏面還有如何設置cookie過時時間,以及刪除cookie的、github

localStorage和sessionStorage:

localStorage和sessionStorage所使用的方法是同樣的,下面以sessionStorage爲栗子:web

var name='sessionData';
var num=120;
sessionStorage.setItem(name,num);//存儲數據
sessionStorage.setItem('value2',119);
let dataAll=sessionStorage.valueOf();//獲取所有數據
console.log(dataAll,'獲取所有數據');
var dataSession=sessionStorage.getItem(name);//獲取指定鍵名數據
var dataSession2=sessionStorage.sessionData;//sessionStorage是js對象,也可使用key的方式來獲取值
 console.log(dataSession,dataSession2,'獲取指定鍵名數據');
sessionStorage.removeItem(name); //刪除指定鍵名數據
  console.log(dataAll,'獲取所有數據1');
 sessionStorage.clear();//清空緩存數據:localStorage.clear();
  console.log(dataAll,'獲取所有數據2');  複製代碼

使用方式,基本上就上面這些,其實也是比較簡單的。你們能夠把這個copy到本身的編譯器裏面,或者文末有個demo,能夠點開看看。面試

三者的異同:

上面的使用方式說好了,下面就嘮嘮三者之間的區別,這個問題其實不少大廠面試的時候也都會問到,因此能夠注意一下這幾個之間的區別。正則表達式

生命週期:

cookie:可設置失效時間,沒有設置的話,默認是關閉瀏覽器後失效segmentfault

localStorage:除非被手動清除,不然將會永久保存。

sessionStorage: 僅在當前網頁會話下有效,關閉頁面或瀏覽器後就會被清除。

存放數據大小:

cookie:4KB左右

localStorage和sessionStorage:能夠保存5MB的信息。

http請求:

cookie:每次都會攜帶在HTTP頭中,若是使用cookie保存過多數據會帶來性能問題

localStorage和sessionStorage:僅在客戶端(即瀏覽器)中保存,不參與和服務器的通訊

易用性:

cookie:須要程序員本身封裝,源生的Cookie接口不友好

localStorage和sessionStorage:源生接口能夠接受,亦可再次封裝來對Object和Array有更好的支持

應用場景:

從安全性來講,由於每次http請求都會攜帶cookie信息,這樣無形中浪費了帶寬,因此cookie應該儘量少的使用,另外cookie還須要指定做用域,不能夠跨域調用,限制比較多。可是用來識別用戶登陸來講,cookie仍是比stprage更好用的。其餘狀況下,可使用storage,就用storage。

storage在存儲數據的大小上面秒殺了cookie,如今基本上不多使用cookie了,由於更大老是更好的,哈哈哈大家懂得。

localStorage和sessionStorage惟一的差異一個是永久保存在瀏覽器裏面,一個是關閉網頁就清除了信息。localStorage能夠用來誇頁面傳遞參數,sessionStorage用來保存一些臨時的數據,防止用戶刷新頁面以後丟失了一些參數。

瀏覽器支持狀況:

localStorage和sessionStorage是html5才應用的新特性,可能有些瀏覽器並不支持,這裏要注意。

cookie的瀏覽器支持沒有找到,能夠經過下面這段代碼來判斷所使用的瀏覽器是否支持cookie:

if(navigator.cookieEnabled) {
  alert("你的瀏覽器支持cookie功能");//提示瀏覽器支持cookie  
} else {
  alert("你的瀏覽器不支持cookie");//提示瀏覽器不支持cookie   }複製代碼

數據存放處:

Cookie、localStorage、sessionStorage數據存放處
Cookie、localStorage、sessionStorage數據存放處

番外:各瀏覽器Cookie大小、個數限制。

cookie 使用起來仍是須要當心一點,有興趣的能夠看一下這個連接

demo連接

把上面的demo代碼,上傳到github上面了,有須要的小夥伴們,能夠看一下。傳送門

後話

最後要說的是:不要把什麼數據都放在 Cookie、localStorage 和 sessionStorage中,畢竟前端的安全性這麼低。只要打開控制檯就能夠任意的修改 Cookie、localStorage 和 sessionStorage的數據了。涉及到金錢或者其餘比較重要的信息,仍是要存在後臺比較好。

最後:如需轉載,請放上原文連接並署名。碼字不易,感謝支持!本人寫文章本着交流記錄的心態,寫的很差之處,不撕逼,可是歡迎指點。而後就是但願看完的朋友點個喜歡,也能夠關注一下我。
blog網站 and 掘金我的主頁

以上2017.11.25

參考連接:

HTML 5 Web 存儲
localStorage和sessionStorage詳解
詳說 Cookie, LocalStorage 與 SessionStorage

相關文章
相關標籤/搜索