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