1. 程式人生 > >sessionStorage、localStorage與cookie、session詳解

sessionStorage、localStorage與cookie、session詳解

cookie和session的區別

由於HTTP是一種無狀態的協議,資料交換完畢後會關閉連線,為了分辨一個請求是誰發起的,以免在同一個網站每開啟一個頁面都需要重新登入,引入了Session和Cookie兩個機制。
Cookie和Session都是用來跟蹤瀏覽器使用者身份的方式。

1、保持狀態
Cookie儲存在瀏覽器端,Session儲存在伺服器端

2、使用方式:
(1)Cookie:
第一次登陸後,伺服器會生成一個cookie,並通過set-cookie響應頭將包含有cookie的資料傳給瀏覽器,然後被瀏覽器儲存在本地。當該使用者傳送第二次請求時,瀏覽器就會自動把上次儲存的Cookie攜帶在請求中傳送給伺服器,伺服器根據這個Cookie就可以判斷是哪個使用者進行的操作。
Cookie在生成時就會被指定一個Expire值,這就是Cookie的生存週期,在這個週期內Cookie有效,超出週期Cookie就會被清除。有些頁面將Cookie的生存週期設定為“0”或負值,這樣在關閉瀏覽器時,就馬上清除Cookie,不會記錄使用者資訊,更加安全。

(2)Session:
有了Cookie來區分身份,還需要session來儲存使用者詳細資訊以供呼叫,因為這些資訊是是隱私資訊,直接把資訊通過cookie發到並儲存在客戶端是很不安全的,且cookie大小不能超過4k,不支援中文。
當瀏覽器發起一個請求時,伺服器會先檢查是否攜帶了存有SessionID的cookie。如果有,那麼就會從伺服器的session裡取出這個ID對應的session返回給瀏覽器。如果客戶端請求中沒有SessionID,伺服器會建立新的session,並把SessionID返回給客戶端。

如果使用者禁用cookie,就需要將SessionID拼接到訪問地址後。

3、儲存內容


cookie只能儲存字串型別,session通過類Hashtable的資料結構來儲存,支援任何型別的物件(session中可含有多個物件)

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

5、安全性
session的安全性大於cookie。

原因如下:
(1)SessionID儲存在cookie中,若要攻破session首先要攻破cookie;
(2)SessionID是要有人登入,或者啟動session_start才會有,所以攻破cookie也不一定能得到SessionID;
(3)第二次啟動session_start後,前一次的SessionID就是失效了,session過期後,SessionID也隨之失效。
(4)SessionID是加密的

6、應用場景
cookie:
(1)判斷使用者身份,以便下次登入時能夠實現單點登入(或記住密碼)。
(2)儲存上次登入的時間等資訊。
(3)儲存上次檢視的頁面

session:
(1)網上商城中的購物車
(2)儲存使用者登入資訊
(3)將某些資料放入session中,供同一使用者的不同頁面使用
(4)防止使用者非法登入

7、缺點
cookie:
(1)大小受限
(2)使用者可以操作(禁用)cookie,使功能受限
(3)安全性較低
(4)有些狀態不可能儲存在客戶端。
(5)每次訪問都要傳送cookie給伺服器,浪費頻寬。
(6)cookie資料有路徑(path)的概念,可以限制cookie只屬於某個路徑下。

session:
(1)Session儲存的東西越多,就越佔用伺服器記憶體,對於使用者線上人數較多的網站,伺服器的記憶體壓力會比較大。
(2)依賴於cookie(sessionID儲存在cookie),如果禁用cookie,則要使用URL重寫,不安全
(3)建立Session變數有很大的隨意性,可隨時呼叫,不需要開發者做精確地處理,所以,過度使用session變數將會導致程式碼不可讀而且不好維護。

localStorage和sessionStorage的區別

HTML5提供了WebStorage API ,包括sessionStorage 和 localStorage ,可以方便的在web請求之間儲存資料。克服了cookie帶來的一些限制。
有了本地資料,就可以避免資料在瀏覽器和伺服器間不必要地來回傳遞。

1、生命週期
localStorage的生命週期是永久的,關閉頁面或瀏覽器之後localStorage中的資料也不會消失,除非主動刪除資料。
sessionStorage的生命週期是在僅在當前會話下有效,關閉了瀏覽器視窗後就會被銷燬。

2、儲存大小
localStorage和sessionStorage的儲存資料大小一般都是:5MB

3、儲存位置
localStorage和sessionStorage都儲存在客戶端,不與伺服器進行互動通訊。

4、儲存內容型別
localStorage和sessionStorage只能儲存字串型別,對於複雜的物件可以使用ECMAScript提供的JSON物件的stringify和parse來處理

5、獲取方式
localStorage:window.localStorage;
sessionStorage:window.sessionStorage;

6、應用場景
localStoragese:儲存使用者的一些設定;記錄瀏覽器對頁面的訪問次數;
sessionStorage:適合單頁應用各業務模組之間傳值;

WebStorage與cookie的區別

1、儲存空間
cookie為4KB
WebStorage是5MB

2、傳輸方式
WebStorage不會傳送到伺服器,儲存在本地的資料可以直接獲取,所以不必擔心被擷取。
cookie在每次請求中都會傳送到伺服器,不管是否被需要。

3、過期時間
cookie的過期時間由設定的Expire決定,到期就會銷燬,如果這個值為0或負數,就是會話期間有效。
localStorage的生命週期是永久的,關閉頁面或瀏覽器之後localStorage中的資料也不會消失,除非主動刪除資料。
sessionStorage的生命週期是在僅在當前會話下有效,關閉了瀏覽器視窗後就會被銷燬。

4、快速獲取
有的資料儲存在WebStorage上,從本地獲取會比從伺服器端獲取快得多。

5、操作性
WebStorage提供了一些方法,資料操作比cookie方便;

setItem (key, value)  //儲存資料,以鍵值對的方式儲存資訊。
getItem (key)  //獲取資料,將鍵值傳入,即可獲取到對應的value值。
removeItem (key)  //刪除單個數據,根據鍵值移除對應的資訊。
clear ()  //刪除所有的資料
key (index)  //獲取某個索引的key