sessionStorage 蔼夜、localStorage 和 cookie 之間的區(qū)別
共同點(diǎn):都是保存在瀏覽器端贷笛,且同源的钉嘹。
區(qū)別:
1.cookie數(shù)據(jù)始終在同源的http請(qǐng)求中攜帶(即使不需要)助被,即cookie在瀏覽器和服務(wù)器間來(lái)回傳遞。而sessionStorage和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)給服務(wù)器派阱,僅在本地保存诬留。
2.存儲(chǔ)大小限制也不同,cookie數(shù)據(jù)不能超過(guò)4k贫母,同時(shí)因?yàn)槊看蝖ttp請(qǐng)求都會(huì)攜帶cookie文兑,所以cookie只適合保存很小的數(shù)
據(jù),sessionStorage和localStorage 雖然也有存儲(chǔ)大小的限制颁独,但比cookie大得多,可以達(dá)到5M或更大誓酒。
3.數(shù)據(jù)有效期不同樟蠕,sessionStorage:僅在當(dāng)前瀏覽器窗口關(guān)閉前有效靠柑,自然也就不可能持久保持;localStorage:始終有效歼冰,窗口或?yàn)g覽器關(guān)閉也一直保存,因此用作持久數(shù)據(jù)隔嫡;cookie只在設(shè)置的cookie過(guò)期時(shí)間之前一直有效,即使窗口或?yàn)g覽器關(guān)閉腮恩。
4.作用域不同梢杭,sessionStorage不在不同的瀏覽器窗口中共享秸滴,即使是同一個(gè)頁(yè)面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的咒唆。Web?Storage 支持事件通知機(jī)制届垫,可以將數(shù)據(jù)更新的通知發(fā)送給監(jiān)聽(tīng)者。
與Cookie相比全释,Web Storage存在不少的優(yōu)勢(shì)装处,概括為以下幾點(diǎn):
1. 存儲(chǔ)空間更大:IE8下每個(gè)獨(dú)立的存儲(chǔ)空間為10M,其他瀏覽器實(shí)現(xiàn)略有不同浸船,但都比Cookie(<=4kb)要大很多符衔。
2. 存儲(chǔ)內(nèi)容不會(huì)發(fā)送到服務(wù)器:當(dāng)設(shè)置了Cookie后,Cookie的內(nèi)容會(huì)隨著請(qǐng)求一并發(fā)送到服務(wù)器糟袁,這對(duì)于本地存儲(chǔ)的數(shù)據(jù)是一種帶寬浪費(fèi)。而Web Storage中的數(shù)據(jù)則僅僅是存在本地躺盛,不會(huì)與服務(wù)器發(fā)生任何交互项戴。
3. 更多豐富易用的接口:Web Storage提供了一套更為豐富的接口,使得數(shù)據(jù)操作更為簡(jiǎn)便槽惫。
function setCookie(cname, cvalue, exdays) {
? ? var d = new Date();
? ? d.setTime(d.getTime() + (exdays*24*60*60*1000));
? ? var expires = "expires="+ d.toUTCString()
? ? document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
*path?參數(shù)周叮,您可以告訴瀏覽器 cookie 屬于什么路徑。默認(rèn)情況下界斜,cookie 屬于當(dāng)前頁(yè)仿耽。
localStorage.setItem("name", "hsy")
sessionStorage.setItem("name", "hsy");
cookie的缺點(diǎn)主要集中于安全性和隱私保護(hù)
1.cookie可能被禁用。當(dāng)用戶(hù)非常注重隱私保護(hù)的時(shí)候各薇,他會(huì)禁用cookie緩存
2.cookie可能會(huì)被刪除项贺,每個(gè)cookie都是硬盤(pán)上的一個(gè)文件,因此很容易被用戶(hù)刪除
3.cookie安全性不夠高峭判,cookie都是以純文本形式記錄在文件中开缎,如果要保存用戶(hù)名密碼等信息的時(shí)候,最好事先經(jīng)過(guò)加密處理