1. 程式人生 > >Session、LocalStorage、SessionStorage、Cache-Ctrol比較

Session、LocalStorage、SessionStorage、Cache-Ctrol比較

.com 我們 相同域名 讀取 刷新 查看 會有 地址 設置

1、Session

Session是什麽?

服務器通過 Set-Cookie給用戶一個sessionId
sessionId對應 服務器 內的一小塊內存
每次用戶訪問服務器的時候,服務器就聽過SessionId去讀取對應的session
從而知道用戶的信息

sessionId的篡改就很難了,因為用戶得到的只是一個隨機數而已

session其實就是一塊內存

為什麽要使用Session?

我們在登錄成功之後,後端會將用戶信息存入到數據庫,然後在回應裏面會寫入一個字段:
"Set-Cookie:‘這裏是用戶名+密碼或者其他用戶信息‘"

自此之後,客戶端的每一次請求都會自動帶上這段cookie信息
但是,會有一個問題就是,cookie有可能會被篡改,如果被篡改了的話,信息就亂了,
比如,用戶只要改下cookie中的用戶名,就可以以另外一個身份登錄了。

Session的使用?

在用戶登錄成功之後,服務器會在內存中寫入一個sessionId,是一個隨機數
然後這個sessionId 對應的就是用戶的登錄信息。
然後再將這個sessionId以回應信息回傳給客戶端,
通過Set-Cookie: sessionId(‘2678613863‘),寫入瀏覽器。

以後,瀏覽器再次請求的時候 就是帶上這個sessionId給服務器,服務器通
過查看客戶端帶上來的cookie裏面的這個sessionId
去尋找該用戶的登錄信息,如果找到的話,就是已經是登錄成功了,如果沒有找到的話
那就是沒有這個用戶需要註冊的了

總結Cookie與Session

Cookie

1. 服務器通過Set-Cookie頭給客戶端一段字符串
2. 客戶端每次訪問相同域名的網頁的時候,必須帶上這段字符串
3. 客戶端要在一段時間內保存這個Cookie
註意:前端不要寫Cookie,影響性能

Session

1. 將SessionId通過Cookie發給客戶端
2. 客戶端訪問服務器時,服務器讀取SessionId
3. 服務器中有一塊內存(哈希表)保存了所有session
4. 通過SessionId我們可以得到對應用戶的隱私信息,如用戶名密碼等

2、LocalStorage

1. LocalStorage與Http無關,localStorage的值其實是存在c盤的文件裏面
2. Http每次請求不會帶上LocalStorage的值
3. 只有相同域名的頁面才能互相讀取LocalStorage(這個功能由瀏覽器完)
4. 每個域名LocalStorage最大存儲量為5MB左右,每個瀏覽器不一樣
5. LocalStorage永久有效,除非清除

SessionStorage

1,2,3,4同localStorage,

不同的是,SessionStorage在用戶關閉頁面後就失效

3、Http緩存(Cache-Control)

技術分享圖片

Cache-Control: max-age=3600 意思是:3600s內不要再次請求,即緩存3600s
(大部分是設置了一年)
Cache-Control是http寫入客戶端的,這個可以加快頁面下載速度

例子:
比如我們要請求一個main.js,客戶端第一次去請求的時候,大概花了1s鐘的時間,
然後服務器接受到請求之後,通過 將Cache-Control: 30 (默認單位為s),
傳回給瀏覽器,那麽在30s內,我們再刷新頁面時,瀏覽器就會阻隔請求,
會直接從緩存中讀取這個js,過了30s之後才會去重新發起請求
我們可以看到下圖,第二次請求的時候只有0s,這將會極大地提升頁面打開速度

如果勾選了 Disable cache 你就是不會讀取緩存了,每次都會去請求資源
復制代碼

如果想要更新緩存的話,給js或者css的請求地址後加一個隨機的查詢參數,這樣每次請求的url就不一樣了,就可以就可以更新緩存了

具體參考https://www.codercto.com/a/18691.html

Session、LocalStorage、SessionStorage、Cache-Ctrol比較