Storage、cookie的用途和優(yōu)缺點比較
Storage的概念和cookie的相似,區(qū)別是storage是為了更大容量的存儲設計的。cookie的大小是受限制的,并且每次請求一個新的頁面的時候cookie都會被發(fā)送過去,這樣無形中浪費寬帶,另外cookie還需要指定的作用域,不可以跨域調用。
cookie的作用是與服務器進行交互,作為http規(guī)范的一部分存在,而web storage僅僅是為了本地“存儲”數(shù)據(jù)而生。
Cookie
Cookie的優(yōu)點:具有極高的擴展性和可用性
1.可以控制保存在cookie中的session對象的大小。
2.通過加密和安全傳輸技術,減少cookie被破解的可能性。
3.可以控制cookie的生命期,給cookie一個時效性 。
cookie的缺點:
1.cookie的長度和數(shù)量的限制。最多只能有20條cookie,每個cookie長度不能超過4KB。否則會被截掉至4KB。
2.cookie可能被禁用或刪除
3.安全性問題。cookie安全性不夠高,cookie都是以純文本形式記錄在文件中,如果要保存用戶名密碼等信息的時候,最好事先經(jīng)過加密處理。如果cookie被人攔掉了,就可以獲取到所有session信息
在html5中web storage包括兩種存儲方式:sessionstorage和localstorage
localStorage優(yōu)點:
localStorage解決了cookie存儲空間太小的問題。
相比于cookie的4KB大小存儲空間,localStorage的存儲空間大小來到了5MB,相當于一個前端的數(shù)據(jù)庫。
格式
Storage存儲的格式是鍵值對(key-value)的格式。
并且瀏覽器會將所有Storage的值類型限定為string類型,所以需要進行一些轉換。
localStorage缺點
低版本的ie瀏覽器會不支持Storage。
Storage存儲數(shù)據(jù)所占空間太多會影響性能。導致頁面變卡。
Storage并不會被搜索引擎的爬蟲所抓取到。
localStorage和sessionStorage的區(qū)別
localStorage的存儲是永久性的,只有在手動刪除或者瀏覽器被卸載后才會被清除。
sessionStorage的存儲保存同一窗口或者標簽頁的數(shù)據(jù),當窗口或者頁面關閉后會被清除。
cookie、localstorage和sessionstrage的比較
共同點:用于數(shù)據(jù)的存儲。
區(qū)別:
1、是否需要添加到http請求頭?
HTTP Cookie(cookie):在客戶端存儲會話信息,要求服務器對任意HTTP請求發(fā)送set-cookie HTTP頭作為響應的一部分,包含會話信息。例如set-cookie: name=value。然后瀏覽器會存儲這樣的會話信息,并在這之后,通過為每個請求添加cookie HTTP頭將信息發(fā)送回服務器。如cookie:name=value。
Web Storage:無須將數(shù)據(jù)發(fā)回服務器,僅在本地保存。
2.存儲大小限制也不同,cookie數(shù)據(jù)不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合保存很小的數(shù)
據(jù),sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大。如果在發(fā)送請求時需要攜帶大量的報文,建議使用storage更好一點
3.數(shù)據(jù)有效期不同,sessionStorage:僅在當前瀏覽器窗口關閉前有效,自然也就不可能持久保持;localStorage:始終有效,窗口或瀏覽器關閉也一直保存,因此用作持久數(shù)據(jù);cookie只在設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉。
4.作用域不同,sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個頁面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知機制,可以將數(shù)據(jù)更新的通知發(fā)送給監(jiān)聽者。
5.路徑:Cookie有路徑的限制(比如cookie可以寫在某個域名下面或者某個路徑下面,我們只讓/AAA.com生效,而/bbb.com則就會看不到),Storage只存儲的域名下(比如你寫在www.baidu.com下面,在這個域名下,不管是什么路徑都有這個Storage)
Web Storage存在不少的優(yōu)勢
1. 存儲空間更大:IE8下每個獨立的存儲空間為10M,其他瀏覽器實現(xiàn)略有不同,但都比Cookie(<=4kb)要大很多。
2. 存儲內容不會發(fā)送到服務器:當設置了Cookie后,Cookie的內容會隨著請求一并發(fā)送到服務器,這對于本地存儲的數(shù)據(jù)是一種帶寬浪費。而Web Storage中的數(shù)據(jù)則僅僅是存在本地,不會與服務器發(fā)生任何交互。
3. 更多豐富易用的接口:Web Storage提供了一套更為豐富的接口,使得數(shù)據(jù)操作更為簡便。您可以告訴瀏覽器 cookie 屬于什么路徑。默認情況下,cookie 屬于當前頁。
localStorage.setItem("name", "張三"),sessionStorage.setItem("age", 18);可進行(key,value)的賦值操作
封裝Storage
為什么封裝Storage?
Storage本身有API,但是只是簡單的key/value形式
Storage只能存儲字符串,需要人工轉為json對象
Storage只能一次性清空,不能單個清空(api下)
/** * Storage封裝 */ const STORAGE_KEY = 'mall'; //設置一個獨一無二的key export default{ // 存儲值 setItem(key,value,module_name){ if (module_name){ let val = this.getItem(module_name); val[key] = value; this.setItem(module_name, val); }else{ let val = this.getStorage(); val[key] = value; window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(val)); } }, // 獲取某一個模塊下面的屬性user下面的userName getItem(key,module_name){ if (module_name){ let val = this.getItem(module_name); if(val) return val[key]; } return this.getStorage()[key]; }, getStorage(){ return JSON.parse(window.sessionStorage.getItem(STORAGE_KEY) || '{}'); }, clear(key, module_name){ let val = this.getStorage(); if (module_name){ if (!val[module_name])return; delete val[module_name][key]; }else{ delete val[key]; } window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(val)); } }
相關文章
關于laydate.js加載laydate.css路徑錯誤問題解決
日期時間選擇插件 laydate.js相信對大家來說都不陌生,這篇文章主要給大家介紹了關于laydate.js加載laydate.css路徑錯誤問題解決的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-12-12Javascript實現(xiàn)的鼠標經(jīng)過時播放聲音
今天突然想起做一個當鼠標經(jīng)過<a/>時,會發(fā)出聲音2010-05-05JS解析json數(shù)據(jù)并將json字符串轉化為數(shù)組的實現(xiàn)方法
json數(shù)據(jù)在ajax實現(xiàn)異步交互時起到了很重要的作用,他可以返回請求的數(shù)據(jù),然后利用客戶端的js進行解析,這一點體現(xiàn)出js的強大,本文介紹JS解析json數(shù)據(jù)并將json字符串轉化為數(shù)組的實現(xiàn)方法,需要了解的朋友可以參考下2012-12-12JavaScript實現(xiàn)圖片懶加載與預加載的代碼詳解
圖片懶加載與預加載是前端優(yōu)化中比較常見的方法,也是前端面試中會被問到的問題,如果不做懶加載和預加載,瀏覽器的回流重繪很快,而圖片的加載是需要發(fā)送網(wǎng)絡請求的,一次性發(fā)很多請求就會導致網(wǎng)絡的堵塞,影響用戶體驗,接下來就讓我們來實現(xiàn)一下懶加載以及預加載的效果2025-03-03