摘要:源自阮一峰具體什么意思,請(qǐng)看下面的截圖就一目了然表示對(duì)象的的數(shù)量實(shí)戰(zhàn)網(wǎng)站名網(wǎng)站地址確認(rèn)網(wǎng)站名查詢機(jī)制原意是小甜餅,是服務(wù)器保存在瀏覽器的一小段文本信息,屬于其中一種互聯(lián)網(wǎng)存儲(chǔ)機(jī)制。
目錄 1. Web Storage 2. Cookie機(jī)制 3. 二者的聯(lián)系與區(qū)別 1.Web Storage
Web Storage是HTML5提供的一種新的瀏覽器端數(shù)據(jù)儲(chǔ)存機(jī)制,它提供兩種數(shù)據(jù)存儲(chǔ)的對(duì)象:
localStorage:該對(duì)象存儲(chǔ)的數(shù)據(jù)沒(méi)有時(shí)間限制;
sessionStorage : 該對(duì)象存儲(chǔ)的數(shù)據(jù)僅用于瀏覽器的一次對(duì)話,當(dāng)對(duì)話結(jié)束(通常是窗口關(guān)閉),數(shù)據(jù)被清空;
localStorage 和 sessionStorage對(duì)象都是構(gòu)造函數(shù)Storage的實(shí)例,擁有同樣的屬性和方法,二者唯一的區(qū)別是存儲(chǔ)數(shù)據(jù)的期限不一;
localStorage和sessionStorage這兩個(gè)對(duì)象相較于cookie的存儲(chǔ)機(jī)制,能夠提供更大的數(shù)據(jù)存儲(chǔ)空間,但是存儲(chǔ)空間根據(jù)瀏覽器類型而定,一般Chrome是2.5MB、Firefox和Opera是5MB、IE是10MB;
目前現(xiàn)代瀏覽器均支持web存儲(chǔ),但I(xiàn)E 7-是不支持的,依舊采用傳統(tǒng)的cookie保持信息;
檢測(cè)瀏覽器是否支持web存儲(chǔ)的方法有:
//method 1 window.localStorage && window.localStorage.getItem //method 2 if (typeOf(Storage) !== "undefined"){ //support Web Storage }else{ }
使用Web Stroage的API進(jìn)行數(shù)據(jù)存儲(chǔ)是,只能存儲(chǔ)為字符串?dāng)?shù)據(jù),因此所以數(shù)據(jù)在寫(xiě)入時(shí)會(huì)隱式調(diào)用toString方法轉(zhuǎn)換為字符串;
var data = { name:"teren", age:18 } localStorage.setItem("data",data); console.info(localStorage.data); localStorage.setItem("realData",JSON.stringify(data)); console.info(localStorage.realData)
【注意事項(xiàng)】
使用前要判斷瀏覽器是否支持Web Stroage(無(wú)痕模式和低版本的IE不支持);
超出存儲(chǔ)容量的處理;
避免敏感信息存入Web Storage,要注意[XXS]()的注入風(fēng)險(xiǎn)
優(yōu)勢(shì)
存儲(chǔ)空間大:與cookie的4k存儲(chǔ)空間相比,Web Storage雖然不同瀏覽器的標(biāo)準(zhǔn)可能不一樣,主流的一般都在5~10M;
頁(yè)面性能優(yōu)化:本地存儲(chǔ)的數(shù)據(jù)不會(huì)被發(fā)到服務(wù)器,與cookie相比,節(jié)省帶寬,加快響應(yīng)速度
接口更加易用
局限性
server端無(wú)法獲取本地?cái)?shù)據(jù),如有需求,可通過(guò)post/get方法;
只能同源共享數(shù)據(jù);
由于localStorage和sessionStorage對(duì)象的屬性和方法是基本一致,下面以localStorage為例,講解一下localStorage對(duì)象的接口;
存儲(chǔ)數(shù)據(jù)
//method 1 localStorage.setItem("key","value"); //method 2 localStorage.key = value
讀取數(shù)據(jù)
//method 1 localStorage.getItem("key") //method 2 localStorage.key
localStorage.setItem("name","teren") console.log(localStorage.name) localStorage.age = 12 console.log(localStorage.age) localStorage.getItem("name"
刪除數(shù)據(jù)
//method 1 localStorage.removeItem("key")//刪除特定的key //method 2 localStorage.clear()//刪除所有的數(shù)據(jù)
獲取特定索引的key
localStorage.key(index)
事件監(jiān)聽(tīng)
當(dāng)存儲(chǔ)的數(shù)據(jù)發(fā)生變化時(shí),會(huì)觸發(fā)storage事件,我們可以通過(guò)以下代碼了解storage的事件對(duì)象包含哪些屬性
function setData(key,value){ localStorage.setItem(key,value) }; setData("name","teren") setData("first","kobe") window.addEventListener("storage",function(e){ console.log(e.oldValue); console.log(e.newValue); console.log(e.url) },false)
注意,該事件不在導(dǎo)致數(shù)據(jù)變化的當(dāng)前頁(yè)面觸發(fā)。如果瀏覽器同時(shí)打開(kāi)一個(gè)域名下面的多個(gè)頁(yè)面,當(dāng)其中的一個(gè)頁(yè)面改變sessionStorage或localStorage的數(shù)據(jù)時(shí),其他所有頁(yè)面的storage事件會(huì)被觸發(fā),而原始頁(yè)面并不觸發(fā)storage事件。可以通過(guò)這種機(jī)制,實(shí)現(xiàn)多個(gè)窗口之間的通信。所有瀏覽器之中,只有IE瀏覽器除外,它會(huì)在所有頁(yè)面觸發(fā)storage事件。(源自阮一峰)
具體什么意思,請(qǐng)看下面的截圖就一目了然:
localStorage.length表示localStorage對(duì)象的key的數(shù)量
//htmlJS Bin 網(wǎng)站名:
網(wǎng)站地址:
網(wǎng)站名:
//js (function(){ var confirm = document.getElementById("confirm") var search = document.getElementById("search") var website = document.getElementById("website") var url = document.getElementById("url") var list = document.getElementById("list") confirm.addEventListener("click",function(e){ localStorage.setItem("website",url.value) console.log(localStorage.website) }); search.addEventListener("click",function(e){ document.getElementById("list").innerHTML = localStorage.getItem("website") console.log(list,innerHTML) }); })();
demo
2.Cookie機(jī)制Cookie原意是小甜餅,是服務(wù)器保存在瀏覽器的一小段文本信息,屬于其中一種互聯(lián)網(wǎng)存儲(chǔ)機(jī)制。
每個(gè)Cookie大小一般不超過(guò)4KB;
Cookie保存的信息包括Cookie名、Cookie值、到期時(shí)間、所屬域名和生效路徑;
瀏覽器每次向服務(wù)器發(fā)出請(qǐng)求,會(huì)在Http請(qǐng)求頭上帶上Cookie信息;
瀏覽器可以設(shè)置拒絕Cookie
window.navigator.cookieEnabled = false;
獲取當(dāng)前頁(yè)面的所有Cookie
var allCookies = document.cookie //document.cookie返回的是分號(hào)分隔的所有cookie,如要取得每個(gè)cookie的值,可使用 var cookies = document.cookie.split(";"); for (var i=0;i寫(xiě)入Cookie
document.cookie = "name=teren"; //document.cookie一次只能寫(xiě)一個(gè)cookie,而且是寫(xiě)入而不是覆蓋;[疑問(wèn)]為什么讀取cookie是全部,而寫(xiě)入則是一個(gè)一個(gè)呢?
這與瀏覽器和服務(wù)器之間的cookie通信格式相關(guān)。瀏覽器向服務(wù)器發(fā)送cookie時(shí),是將所有cookie一起發(fā)送;
GET /sample_page.html HTTP/1.1 Host: www.example.orgCookie: cookie_name1=cookie_value1; cookie_name2=cookie_value2Accept: */*服務(wù)器告訴瀏覽器需要存儲(chǔ)cookie時(shí),則是分行設(shè)定
HTTP/1.0 200 OKContent-type: text/htmlSet-Cookie: cookie_name1=cookie_value1Set-Cookie: cookie_name2=cookie_value2; expires=Sun, 16 Jul 3567 06:23:41 GMT刪除cookie
刪除cookie的簡(jiǎn)便方法就是設(shè)置expires = 0或者是過(guò)期時(shí)間,如expires = Thu,01-Jan-1970 00:00:01 GMTcookie的屬性
Set-Cookie: value[;expires = date][;domain = domain][;path = path][;secure][;HttpOnly]value:規(guī)定cookie的值,形式是鍵值對(duì);
expires:規(guī)定cookie過(guò)期時(shí)間,格式為形式為expires = someDate.toGMTString();
domain:指定cookie所在的域名,只有訪問(wèn)的域名匹配domain屬性,cookie才會(huì)發(fā)送到服務(wù)器;
path:指定路徑,只有path屬性匹配向服務(wù)器發(fā)送的路徑,cookie才會(huì)發(fā)送,只要path屬性匹配發(fā)送路徑的一部分,都可以發(fā)送;
secure:指定cookie只能在加密協(xié)議HTTPS下發(fā)送到服務(wù)器;
HttpOnly:設(shè)置cookie不能被js讀取,這主要是放置XSS攻擊盜取cookie;一個(gè)完整的瀏覽器設(shè)置cookie寫(xiě)法:
document.cookie = "name=teren;" +"expires = Thu,01-Jan-1970 00:00:01 GMT" +"domain = terenyeung.com;" +"path = /;" +"secure;" +"HttpOnly"3.Web Storage和Cookie的聯(lián)系與區(qū)別
特性 cookie Web Storag 數(shù)據(jù)生命周期 服務(wù)器生成的話,為指定失效時(shí)間;瀏覽器段生成的話默認(rèn)為關(guān)閉瀏覽器后 localStorage永久有效,除非使用localStorage.clear()清空;sessionStorage為關(guān)閉瀏覽器后; 存儲(chǔ)空間 一般為4K 一般5MB~10MB 與服務(wù)器通信 每次攜帶在HTTP頭中 僅在客戶端,如需通信,可通過(guò)get或post方法 應(yīng)用場(chǎng)景 用戶登錄身份驗(yàn)證(結(jié)合HttpOnly相對(duì)安全性高) 保存用戶購(gòu)物車信息以及HTML5游戲的本地存儲(chǔ) 參考資料
HTML5?Web 存儲(chǔ)
八一下LocalStorage本地存儲(chǔ)的卦——AlloyTeam
Web Storage API——MDN
Web Storage:瀏覽器端數(shù)據(jù)儲(chǔ)存機(jī)制——阮一峰
Cookie——阮一峰
詳說(shuō) Cookie, LocalStorage 與 SessionStorage
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/86494.html
摘要:最近在用寫(xiě)自己的博客,發(fā)現(xiàn)總是掉到的坑,于是就好好八一八這個(gè)小甜餅,沒(méi)想到居然還說(shuō)很有意思的,每一個(gè)知識(shí)點(diǎn)都能拉出一條大魚(yú),想想自己之前對(duì),簡(jiǎn)直就是它認(rèn)識(shí)我,我只能叫出他的名字。 最近在用thinkjs寫(xiě)自己的博客,發(fā)現(xiàn)總是掉到cookie的坑,于是就好好八一八這個(gè)小甜餅,沒(méi)想到居然還說(shuō)很有意思的,每一個(gè)知識(shí)點(diǎn)都能拉出一條大魚(yú),想想自己之前對(duì)cookie,簡(jiǎn)直就是它認(rèn)識(shí)我,我只能叫出他...
摘要:當(dāng)頁(yè)面重新載入或者被恢復(fù)時(shí),頁(yè)面會(huì)話也是一直存在的。自動(dòng)保存一個(gè)文本域中的內(nèi)容,如果瀏覽器被意外刷新,則恢復(fù)該文本域中的內(nèi)容,所以不會(huì)丟失任何輸入的數(shù)據(jù)。該例中,我們測(cè)試數(shù)據(jù)項(xiàng)是否存在。 訪問(wèn)原文地址 概述 DOM存儲(chǔ)的機(jī)制是通過(guò)存儲(chǔ)字符串類型的鍵/值對(duì),來(lái)提供一種安全的存取方式.這個(gè)附加功能的目標(biāo)是提供一個(gè)全面的,可以用來(lái)創(chuàng)建交互式應(yīng)用程序的方法(包括那些高級(jí)功能,例如可以離線工作一...
摘要:顧名思義,確實(shí)非常小,它的大小限制為左右,是網(wǎng)景公司的前雇員在年月的發(fā)明。是標(biāo)準(zhǔn)中新加入的技術(shù),它并不是什么劃時(shí)代的新東西。特性與的接口類似,但保存數(shù)據(jù)的生命周期與不同。但當(dāng)頁(yè)面關(guān)閉后,中的數(shù)據(jù)就會(huì)被清空。 本文最初發(fā)布于我的個(gè)人博客:咀嚼之味 最近在找暑期實(shí)習(xí),其中百度、網(wǎng)易游戲、阿里的面試都問(wèn)到一些關(guān)于HTML5的東西,問(wèn)題大多是這樣開(kāi)頭的:你用過(guò)什么HTML5的技術(shù)呀?...
閱讀 2053·2023-04-26 02:23
閱讀 1794·2021-09-03 10:30
閱讀 1358·2019-08-30 15:43
閱讀 1198·2019-08-29 16:29
閱讀 542·2019-08-29 12:28
閱讀 2340·2019-08-26 12:13
閱讀 2196·2019-08-26 12:01
閱讀 2408·2019-08-26 11:56