cookie,localStorage和sessionStorage 淺談

 

瀏覽器的緩存機制提供了可以將用戶數據存儲在客戶端上的方式,可以利用cookie,session等跟服務端進行數據交互。

一、cookie和session

cookie和session都是用來跟蹤瀏覽器用戶身份的會話方式。

區別:

1、保持狀態:cookie保存在瀏覽器端,session保存在服務器端

2、使用方式:

(1)cookie機制:如果不在瀏覽器中設置過期時間,cookie被保存在內存中,生命週期隨瀏覽器的關閉而結束,這種cookie簡稱會話cookie。如果在瀏覽器中設置了cookie的過期時間,cookie被保存在硬盤中,關閉瀏覽器後,cookie數據仍然存在,直到過期時間結束才消失。

     Cookie是服務器發給客戶端的特殊信息,cookie是以文本的方式保存在客戶端,每次請求時都帶上它

(2)session機制:當服務器收到請求需要創建session對象時,首先會檢查客戶端請求中是否包含sessionid。如果有sessionid,服務器將根據該id返回對應session對象。如果客戶端請求中沒有sessionid,服務器會創建新的session對象,並把sessionid在本次響應中返回給客戶端。通常使用cookie方式存儲sessionid到客戶端,在交互中瀏覽器按照規則將sessionid發送給服務器。如果用戶禁用cookie,則要使用URL重寫,可以通過response.encodeURL(url) 進行實現;API對encodeURL的結束爲,當瀏覽器支持Cookie時,url不做任何處理;當瀏覽器不支持Cookie的時候,將會重寫URL將SessionID拼接到訪問地址後。

3、存儲內容:cookie只能保存字符串類型,以文本的方式;session通過類似與Hashtable的數據結構來保存,能支持任何類型的對象(session中可含有多個對象)

4、存儲的大小:cookie:單個cookie保存的數據不能超過4kb;session大小沒有限制。

5、安全性:cookie:針對cookie所存在的攻擊:Cookie欺騙,Cookie截獲;session的安全性大於cookie。

 

二:cookie,localStorage和sessionStorage

​ cookie 是存儲於訪問者的計算機中的變量。每當同一臺計算機通過瀏覽器請求某個頁面時,就會發送這個 cookie。你可以使用 JavaScript 來創建和取回 cookie 的值。

​ 當訪問者首次訪問頁面時,他或她也許會填寫他/她們的名字。名字會存儲於 cookie 中。當訪問者再次訪問網站時,他們會收到類似 "Welcome Jacob!" 的歡迎詞。而名字則是從 cookie 中取回的。這通常就是通過在 cookie 中存入一段辨別用戶身份的數據來實現的。

​ 在HTML5之前,這些都是由 cookie 完成的。但是 cookie 不適合大量數據的存儲,因爲它們由每個對服務器的請求來傳遞,這使得 cookie 速度很慢而且效率也不高。

​ 在HTML5中提供了兩種在客戶端存儲數據的新方法:

sessionStorage

​ 爲每一個給定的源(given origin)維持一個獨立的存儲區域,該存儲區域在頁面會話期間可用(即只要瀏覽器處於打開狀態,包括頁面重新加載和恢復)。

localStorage

​ 同樣的功能,但是在瀏覽器關閉,然後重新打開後,除非數據被清除,否則仍然存在。

> 三者的區別

特性 cookie sessionStorage localStorage
數據生命期 生成時就會被指定一個maxAge值,這就是cookie的生存週期,在這個週期內cookie有效,默認關閉瀏覽器失效 頁面會話期間可用 除非數據被清除,否則一直存在
存放數據大小 4K左右(因爲每次http請求都會攜帶cookie) 一般5M或更大詳細看這(需科學上網)
與服務器通信 由對服務器的請求來傳遞,每次都會攜帶在HTTP頭中,如果使用cookie保存過多數據會帶來性能問題 數據不是由每個服務器請求傳遞的,而是只有在請求時使用數據,不參與和服務器的通信
易用性 cookie需要自己封裝setCookie,getCookie 可以用源生接口,也可再次封裝來對Object和Array有更好的支持
共同點 都是保存在瀏覽器端,和服務器端的session機制不同(這裏有一篇很好的介紹cookie和session的文章

> 安全性問題

​ 無論是cookie還是HTML5的本地存儲,都是相對不安全的,很容易受到各種各樣的攻擊,特別是HTML5的存儲空間大,給了攻擊者更大的發揮平臺,所以都不能用來存儲敏感信息。登錄信息等重要信息還是存放到服務器裏比較好。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章