在作項目的過程當中,咱們常常遇到須要把信息存儲在本地的狀況,好比權限驗證的token、用戶信息、埋點計數、客戶配置的皮膚信息或語言種類等,咱們能夠暫存一下避免瀏覽器沒必要要的請求和客戶多餘操做,給客戶使用帶來方便。html
那麼瀏覽器存儲有哪些方法呢,主要有cookie、localStorage、sessionStorage前端
cookie屬於文檔對象模型DOM樹根節點document,而 sessionStorage 和 localStorage 屬於瀏覽器對象模型BOM的對象windowsegmentfault
其中 sessionStorage 和 localStorage 是 HTML5 Web Storage API 提供的api
h5以前,存儲主要用cookies,缺點是在請求頭上帶着數據,致使流量增長。大小限制4k
數組
操做方式:瀏覽器
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/" // 設置cookie document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT" // 刪除cookie
設置cookie的方法比較簡單,其中有幾個參數能夠添加安全
過時時間,當過了到期日期時,瀏覽器會自動刪除該cookie,若是想刪除一個cookie,只須要把它過時時間設置成過去的時間便可
好比但願設置過時時間一年:new Date().getTime() + 365 * 24 * 60 * 60 * 1000
服務器
若是不設置過時時間,則表示這個cookie生命週期爲瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。cookie
路徑,值能夠是一個目錄,或者是一個路徑。session
若是cc.com/test/index.html 創建了一個cookie,那麼在cc.com/test/目錄裏的全部頁面,以及該目錄下面任何子目錄裏的頁面均可以訪問這個cookie。所以在cc.com/test/test2/test3 裏的任何頁面均可以訪問cc.com/test/index.html創建的cookie。若cc.com/test/ 若想訪問cc.com/test/index.html設置的cookes,須要把cookies的path屬性設置成「/」。
在指定路徑的時候,凡是來自同一服務器,URL裏有相同路徑的全部WEB頁面均可以共享cookies。
主機名,是指同一個域下的不一樣主機,例如:www.baidu.com和map.baidu.com就是兩個不一樣的主機名。默認狀況下,一個主機中建立的cookie在另外一個主機下是不能被訪問的,但能夠經過domain參數來實現對其的控制:document.cookie = "name=value;domain=.baidu.com"
這樣,全部*.baidu.com的主機均可以訪問該cookie。
以鍵值對(Key-Value)的方式存儲,永久存儲,永不失效,除非手動刪除。IE8+支持,每一個域名限制5M
打開同域的新頁面也能訪問獲得
操做方式:
window.localStorage.username = 'hehe' // 設置 window.localStorage.setItem('username', 'hehe') // 設置 window.localStorage.getItem('username') // 讀取 window.localStorage.removeItem('username') // 刪除 window.localStorage.key(1) // 讀取索引爲1的值 window.localStorage.clear() // 清除全部
能夠存儲數組、數字、對象等能夠被序列化爲字符串的內容
sessionStorage操做的方法與localStroage是同樣的,區別在於 sessionStorage 在關閉頁面後即被清空,而 localStorage 則會一直保存。不少時候數據只須要在用戶瀏覽一組頁面期間使用,關閉窗口後數據就能夠丟棄了,這種狀況使用sessionStorage就比較方便。
注意,刷新頁面sessionStorage不會清除,可是打開同域新頁面訪問不到
他們都是保存在瀏覽器端的存儲方式,他們之間的區別:
須要注意的是,不是什麼數據都適合放在 Cookie、localStorage 和 sessionStorage 中的,由於它們保存在本地容易被篡改,使用它們的時候,須要時刻注意是否有代碼存在 XSS 注入的風險。因此千萬不要用它們存儲你係統中的敏感數據。
網上的帖子大多深淺不一,甚至有些先後矛盾,在下的文章都是學習過程當中的總結,若是發現錯誤,歡迎留言指出~
參考: