一、localStorage 和 sessionStorage
最初的 “Web 存儲” 規(guī)范包含了兩種對象的定義:localStorage 和 sessionStorage。這兩個屬性都代表同一個 Storage 對象——一個持久化關(guān)聯(lián)數(shù)組。
?localStorage 和 sessionStorage 兩者的區(qū)別在于存儲的有效期和作用域的不同:數(shù)據(jù)可以存儲多長時間以及誰擁有數(shù)據(jù)的訪問權(quán)。
1. 存儲有效期和作用域
?localStorage 存儲的數(shù)據(jù)是永久性的,除非 Web 應(yīng)用刻意刪除存儲的數(shù)據(jù),或者用戶通過設(shè)置瀏覽器配置來刪除,否則數(shù)據(jù)將一直保留在用戶的電腦上,永不過期。
localStorage 的作用域是限定在文檔源級別的。文檔源是通過協(xié)議、主機名以及端口三者來確定的。同源的文檔間共享同樣的 localStorage 數(shù)據(jù)。它們可以互相讀取對方的數(shù)據(jù),甚至可以覆蓋對方的數(shù)據(jù)。但是,非同源的文檔間互相都不能讀取或者覆蓋對方的數(shù)據(jù)。同一個瀏覽器,不同標(biāo)簽頁是可以的,受瀏覽器供應(yīng)商限制,跨瀏覽器不行。
sessionStorage 的有效期和存儲數(shù)據(jù)的腳本所在的最頂層的窗口或者是瀏覽器標(biāo)簽頁是一樣。一旦窗口或者標(biāo)簽頁被永久關(guān)閉來,那么所有通過 sessionStorage 存儲的數(shù)據(jù)也都被刪除了。(要注意,現(xiàn)代瀏覽器已經(jīng)具備重新打開最近關(guān)閉的標(biāo)簽頁隨后恢復(fù)上一次瀏覽的會話記錄功能,因此,這些標(biāo)簽頁以及與之相關(guān)的 sessionStorage 的有效期可能會更加長些)。
sessionStorage 的作用域也是限定在文檔源中,因此非同源文檔間都是無法共享 sessionStorage 的。不僅如此,sessionStorage 的作用域還被限定在窗口中。如果同源的文檔渲染在不同的瀏覽器標(biāo)簽頁中,那么它們互相之間擁有的是各自的 sessionStorage 數(shù)據(jù),無法共享。
2. 存儲 API
setItem()、getItem()、removeItem()、delete操作符、clear()、length屬性、key()。
二、cookie
1. 限制
cookie 在性質(zhì)上是綁定在特定域名下的。每個域的 cookie 總數(shù)是有限的,IE每個域最多50個,F(xiàn)irefox(50),Opera(30),Safari 和 Chrome(沒有硬性規(guī)定)。當(dāng)超過單個域名限制之后還要再設(shè)置 cookie,瀏覽器就會清楚以前設(shè)置的 cookie。
瀏覽器中對于 cookie 的尺寸也有限制。大多數(shù)瀏覽器都有大約 4KB 的限制。尺寸限制影響到一個域下所有的 cookie。而并非每個 cookie 單獨限制。
2. 構(gòu)成
名稱(name)、值(value)、域(domain)、路徑(path)、失效時間(expires)、安全標(biāo)志(secure)。名和值都必須被 URL 編碼。
3. 有效期和作用域
cookie 默認(rèn)的有效期很短暫;它只能持續(xù)在 Web 瀏覽器的會話期間,一旦用戶關(guān)閉瀏覽器,cookie 保存的數(shù)據(jù)就丟失了。要注意的是:這與 sessionStorage 的有效期還是有區(qū)別的:cookie 的作用域并不是局限在瀏覽器的單個窗口中,它的有效期和整個瀏覽器進(jìn)程而不是單個瀏覽器窗口的有效期一致。
cookie 的作用域是通過文檔源和文檔路徑來確定的。該作用域通過 cookie 的 path 和 domain 屬性也是可配置的。默認(rèn)情況下,cookie 和創(chuàng)建它的 web 頁面有關(guān),并對該 web 頁面以及和該 web 頁面同目錄或者子目錄的其他 web 頁面可見。
4. 讀取、寫入、刪除
document.cookie