一、cookie、sessionStorage、localStorage的區(qū)別
1、存儲(chǔ)空間不同
Cookie:每個(gè) Cookie 的大小一般不能超過 4KB。sessionStorage:某些瀏覽器支持的大小為 5MB,但是不同瀏覽器的具體實(shí)現(xiàn)有所不同。localStorage:某些瀏覽器支持的大小為 5MB,但是不同瀏覽器的具體實(shí)現(xiàn)有所不同。2、存儲(chǔ)方式不同
Cookie:存儲(chǔ)在瀏覽器的“cookie文件夾”中,保存在用戶的磁盤上。每次訪問相同的域名時(shí),瀏覽器都會(huì)將存儲(chǔ)在 cookie 文件夾中的 Cookie 信息發(fā)送給服務(wù)器。sessionStorage:保存在瀏覽器的“sessionStorage數(shù)據(jù)庫”中, 當(dāng)會(huì)話結(jié)束,這部分存儲(chǔ)的信息也會(huì)被清除。與 localStorage 相似,sessionStorage 也只能存儲(chǔ)字符串類型的數(shù)據(jù)。localStorage:保存在瀏覽器的“l(fā)ocalStorage數(shù)據(jù)庫”中,不會(huì)隨著 HTTP 請(qǐng)求發(fā)送到服務(wù)器上,即僅在客戶端(瀏覽器)本地存儲(chǔ),并始終可用于同一瀏覽器和同一服務(wù)器。localStorage 只能存儲(chǔ)字符串類型的數(shù)據(jù)。3、生命周期不同
Cookie:生命周期可以設(shè)置,可以在指定的時(shí)間之前保存,當(dāng)?shù)竭_(dá)指定時(shí)間后 Cookie 就會(huì)自動(dòng)失效;也可以設(shè)置為關(guān)閉瀏覽器后就過期;還可以設(shè)置為只在當(dāng)前會(huì)話中有效,即關(guān)閉頁面后就自動(dòng)刪除。sessionStorage:存儲(chǔ)的數(shù)據(jù)僅在會(huì)話期間存在,即只在瀏覽器打開期間存在,關(guān)閉窗口或者瀏覽器后數(shù)據(jù)會(huì)被刪除。localStorage:存儲(chǔ)的數(shù)據(jù)長(zhǎng)期存在,一直存在瀏覽器本地。二、cookie介紹
1、簡(jiǎn)介
Cookie 并不是它的原意“甜餅”的意思,而是一個(gè)保存在客戶機(jī)中的簡(jiǎn)單的文本文件, 這個(gè)文件與特定的?Web?文檔關(guān)聯(lián)在一起,保存了該客戶機(jī)訪問這個(gè)Web 文檔時(shí)的信息,當(dāng)客戶機(jī)再次訪問這個(gè) Web 文檔時(shí)這些信息可供該文檔使用。由于“Cookie”具有可以保存在客戶機(jī)上的神奇特性,因此它可以幫助我們實(shí)現(xiàn)記錄用戶個(gè)人信息的功能,而這一切都不必使用復(fù)雜的CGI等程序。
舉例來說,一個(gè) Web 站點(diǎn)可能會(huì)為每一個(gè)訪問者產(chǎn)生一個(gè)少數(shù)的ID,然后以 Cookie 文件的形式保存在每個(gè)用戶的機(jī)器上。如果使用瀏覽器訪問?Web,會(huì)看到所有保存在硬盤上的 Cookie。在這個(gè)文件夾里每一個(gè)文件都是一個(gè)由“名/值”對(duì)組成的文本文件,另外還有一個(gè)文件保存有所有對(duì)應(yīng)的 Web 站點(diǎn)的信息。在這里的每個(gè) Cookie 文件都是一個(gè)簡(jiǎn)單而又普通的文本文件。透過文件名,就可以看到是哪個(gè) Web 站點(diǎn)在機(jī)器上放置了Cookie(當(dāng)然站點(diǎn)信息在文件里也有保存)。所謂“cookie”數(shù)據(jù)是指某些網(wǎng)站為了辨別用戶身份,儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密),由用戶客戶端計(jì)算機(jī)暫時(shí)或永久保存的信息。通俗來講就是指緩存數(shù)據(jù),包括用戶名、密碼、注冊(cè)賬戶、手機(jī)號(hào)等公民個(gè)人信息。
2、組成
Cookie是一段不超過4KB的小型文本數(shù)據(jù),由一個(gè)名稱(Name)、一個(gè)值(Value)和其它幾個(gè)用于控制Cookie有效期、安全性、使用范圍的可選屬性組成。其中:
Name/Value:設(shè)置Cookie的名稱及相對(duì)應(yīng)的值,對(duì)于認(rèn)證Cookie,Value值包括Web服務(wù)器所提供的訪問令牌。Expires屬性:設(shè)置Cookie的生存期。有兩種存儲(chǔ)類型的Cookie:會(huì)話性與持久性。Expires屬性缺省時(shí),為會(huì)話性Cookie,僅保存在客戶端內(nèi)存中,并在用戶關(guān)閉瀏覽器時(shí)失效;持久性Cookie會(huì)保存在用戶的硬盤中,直至生存期到或用戶直接在網(wǎng)頁中單擊“注銷”等按鈕結(jié)束會(huì)話時(shí)才會(huì)失效。Path屬性:定義了Web站點(diǎn)上可以訪問該Cookie的目錄?。Domain屬性:指定了可以訪問該 Cookie 的 Web 站點(diǎn)或域。Cookie 機(jī)制并未遵循嚴(yán)格的同源策略,允許一個(gè)子域可以設(shè)置或獲取其父域的 Cookie。當(dāng)需要實(shí)現(xiàn)單點(diǎn)登錄方案時(shí),Cookie 的上述特性非常有用,然而也增加了 Cookie受攻擊的危險(xiǎn),比如攻擊者可以借此發(fā)動(dòng)會(huì)話定置攻擊。因而,瀏覽器禁止在?Domain?屬性中設(shè)置.org、.com 等通用拔尖域名、以及在國家及地區(qū)拔尖域下注冊(cè)的二級(jí)域名,以減小攻擊發(fā)生的范圍。Secure屬性:指定是否使用HTTPS安全協(xié)議發(fā)送Cookie。使用HTTPS安全協(xié)議,可以保護(hù)Cookie在瀏覽器和Web服務(wù)器間的傳輸過程中不被竊取和篡改。該方法也可用于Web站點(diǎn)的身份鑒別,即在HTTPS的連接建立階段,瀏覽器會(huì)檢查Web網(wǎng)站的SSL證書的有效性。但是基于兼容性的原因(比如有些網(wǎng)站使用自簽署的證書)在檢測(cè)到SSL證書無效時(shí),瀏覽器并不會(huì)立即終止用戶的連接請(qǐng)求,而是顯示安全風(fēng)險(xiǎn)信息,用戶仍可以選擇繼續(xù)訪問該站點(diǎn)。由于許多用戶缺乏安全意識(shí),因而仍可能連接到Pharming攻擊所偽造的網(wǎng)站。HTTPOnly屬性 :用于防止客戶端腳本通過document.cookie屬性訪問Cookie,有助于保護(hù)Cookie不被跨站腳本攻擊竊取或篡改。但是,HTTPOnly的應(yīng)用仍存在局限性,一些瀏覽器可以阻止客戶端腳本對(duì)Cookie的讀操作,但允許寫操作;此外大多數(shù)瀏覽器仍允許通過XMLHTTP對(duì)象讀取HTTP響應(yīng)中的Set-Cookie頭。三、sessionStorage的用法
sessionStorage用于本地存儲(chǔ)一個(gè)會(huì)話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個(gè)會(huì)話中的頁面才能訪問并且當(dāng)會(huì)話結(jié)束后數(shù)據(jù)也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲(chǔ),僅僅是會(huì)話級(jí)別的存儲(chǔ)。下面是其用法:
SessionStorage
四、localStorage的使用方法
存值共有3種方式,localStorage相當(dāng)于window對(duì)象下面的一個(gè)屬性,所以有[ ]和.調(diào)用,但也具有自身的setItem方法。下面是代碼示例:
// 自身方法localStorage.setItem("name","bonly");// []方法localStorage["name"]="bonly";// .方法localStorage.name="bonly";
取值也是如此,自身的方法是getItem。下面是代碼示例:
// 自身方法localStorage.getItem("name");// []方法localStorage["name"];// .方法localStorage.name;
改變的方式,就是相當(dāng)于給對(duì)應(yīng)的key重新賦值,就會(huì)把原來的值覆蓋掉。下面是代碼示例:
// 自身方法localStorage.setItem("name","TOM");// []方法localStorage["name"]="TOM";// .方法localStorage.name="TOM";
延伸閱讀1:惡意cookie介紹
Cookies 是文本文件, 一般情況下認(rèn)為它不會(huì)造成安全威脅。 但是,如果在 Cookies 中通過特殊標(biāo)記語言,引入可執(zhí)行代碼,就很可能給用戶造成嚴(yán)重的安全隱患。HTML 為區(qū)別普通文本和標(biāo)記語言,用符號(hào)“<>”來指示HTML 代碼。 這些 HTML 代碼或者定義 Web 網(wǎng)頁格式,或者引入 Web 瀏覽器可執(zhí)行代碼段。 Web 服務(wù) 器可以使用Cookies 信息創(chuàng)建動(dòng)態(tài)網(wǎng)頁。假使 Cookies 包含可執(zhí)行惡意代碼段,那么在顯示合成有該 Cookies 的網(wǎng)頁時(shí),就會(huì)自動(dòng)執(zhí)行這段惡意代碼。當(dāng)然,惡意代碼能否真正造成危害,還取決于Web 站點(diǎn)的安全配置策略。