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