session、cookie、localStorage、sessionStorage

Cookie

Cookie 是小甜餅的意思。顧名思義,cookie 確實非常小,它的大小限制爲4KB左右。它的主要用途有保存登錄信息,比如你登錄某個網站市場可以看到“記住密碼”,這通常就是通過在 Cookie 中存入一段辨別用戶身份的數據來實現的。

localStorage

localStorage 是 HTML5 標準中新加入的技術,它並不是什麼劃時代的新東西。早在 IE 6 時代,就有一個叫 userData 的東西用於本地存儲,而當時考慮到瀏覽器兼容性,更通用的方案是使用 Flash。而如今,localStorage 被大多數瀏覽器所支持,如果你的網站需要支持 IE6+,那以 userData 作爲你的 polyfill 的方案是種不錯的選擇。

sessionStorage

sessionStorage 與 localStorage 的接口類似,但保存數據的生命週期與 localStorage 不同。做過後端開發的同學應該知道 Session 這個詞的意思,直譯過來是“會話”。而 sessionStorage 是一個前端的概念,它只是可以將一部分數據在當前會話中保存下來,刷新頁面數據依舊存在。但當頁面關閉後,sessionStorage 中的數據就會被清空。

session

session是由cookie進行標記的。當需要記住用戶時,比如前面說的登錄,在服務端會設置一個響應頭Set-Cookie,返回給客戶端,例如:Set-Cookie:SESSIONID=12345678;客戶端接收到這個響應後,此後發送的每一個請求瀏覽器都會自動帶上Cookie請求頭,對應內容是Cookie:SESSIONID=12345678。在服務端內存中存有session,將客戶端發送的請求中的cookie值與內存中的session進行對比,就可以識別這個客戶端了,也就能避免上圖中那種尷尬的情況。
但是這又會引發新的問題。
如果用session在服務端進行存儲,會出現的情況是,在一個處理淘寶業務的服務器集羣中,不同的服務器被分配處理的業務不同,他們都處於淘寶這個大域名下,每臺服務器的內存中都保留着一份同樣的session,這就涉及到服務器之間session的複製。如若有100臺服務器,每臺服務器都有着同樣的session,那麼session所佔用的內存之多可以想象。服務器既要處理業務,還得維護session的同步,如此一來,服務器無法通過增加業務的方式進行擴張,不易進行橫向擴展。

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