簡體   English   中英

Express Js:req.session vs cookie vs local storage vs session storage

[英]Express Js: req.session vs cookie vs local storage vs session storage

我是 Express JS 和前端的新手。 我正在開發一個應用程序,它使用 req.session 來維護用戶 session 和本地存儲來存儲一些其他臨時信息。

我看過各種文章來了解上述內容之間的差異,但我仍然不清楚每個人在何時使用以及持續多長時間。

據我說:

1.req.session:服務器維護這個session。當用戶清除cookies時,這個被清除。

2.cookies:Cookies被發送到服務器以維護認證

3.local storage:這一直存在,直到用戶刪除 cookies?

  1. session 存儲:這由瀏覽器維護並持續一個選項卡。

都是web application development中常用的不同類型的storage mechanisms

問題是選擇正確的。


簡而言之

Cookie Storage

Cookie是一種瀏覽器存儲機制,但可以通過請求從服務器端訪問。 開發人員使用 cookies 來存儲應該可以從服務器和客戶端訪問的數據。

示例:身份驗證令牌、分析數據

Session

Session 存儲是一種服務器端存儲機制,只能被服務器訪問。 所以我們不能直接從瀏覽器訪問。 使用會話來存儲機密信息。

關閉session時,session中的數據會被銷毀。

Local Storage

本地存儲就像 Cookie,我們無法從服務器訪問,我們可以存儲比 cookies 多得多的數據,並且除非我們清除,否則它不會過期。

Cookies - 4 KB 和本地存儲 - 5 MB

Session Storage

Session 存儲類似於本地存儲。 但唯一不同的是, Local Storage 不會過期,但是Session 存儲會在頁面 session 結束時被銷毀。 Session 存儲保持每頁(標簽)不同 session

我會 go 通過你的每一個觀點並討論它們......

1)req.session:服務器維護這個session。當用戶清除cookies時,它會被清除。

如果您將其保存在持久性存儲(磁盤支持的數據存儲)中,則可以根據需要保留此 state。 當用戶清除他們的 cookies 時,服務器將失去對它對應的客戶端的跟蹤。根據您管理持久用戶存儲的方式,您可以在用戶再次登錄時重建以前的 session object(允許您使用他們的用戶 ID 在您的數據庫中找到他們持久的 state,創建一個新的 session cookie,從中構建一個新的 session object 並使用新的 session 對象重新連接該瀏覽器)。

2) cookies: Cookies 發送到服務器維護認證

這是 cookies 實用程序的過度簡化。Cookies 允許服務器在用戶的瀏覽器中設置一些 state,該特定瀏覽器的每個請求將返回給服務器。 Cookies 通常用於跟蹤經過身份驗證的客戶端,並且通常用於將密鑰保存到服務器端 session object。還有成千上萬的其他東西 cookies 也可以用於(用戶站點首選項,跟蹤 ID,其他用戶 state, ETC...)。

3) 本地存儲:這會持續到用戶刪除 cookies?

瀏覽器本地存儲與 cookies 完全沒有聯系。它是瀏覽器中的一個單獨的本地數據存儲,只能由 web 頁面中的客戶端 Javascript 訪問。 刪除cookies與刪除本地存儲無關。 它們是單獨的項目,可以單獨保留或刪除。 服務器根本無法訪問本地存儲。 此外,本地存儲是分段的,因此來自一個 web 站點的本地存儲值不能被另一個站點的頁面中的 Javascript 訪問。

4) session storage:這由瀏覽器維護並持續一個選項卡。

不太清楚“會話存儲”是什么意思。 有一些“會話 cookie”,它們在創建時被有意指定為僅在給定瀏覽器運行時持續存在。 如果瀏覽器存在,然后一段時間后重新啟動,則任何 session cookies 都將消失。 它們的目的通常是短期的 cookies,並不意味着持續超出用戶當前正在做的事情。

session 存儲可能指的另一件事是服務器上的長期持久存儲(通常在磁盤上的數據庫中),用於各種用戶屬性或 state 您希望持續很長時間。 想象一下,用戶填充了一個購物車,並且您希望他們能夠在他們從一個設備移動到另一個設備以及在很長一段時間內從中添加/刪除東西時無限期地保留該購物車。 對於這些類型的事情,您通常不會依賴 session object 來跟蹤這些,而是使用數據庫作為該數據的主要來源。 當前正在處理的某些數據子集可能會緩存在服務器端 session object 中,但這只是為了方便,而不是作為它的長期存儲。

或者您可能是指瀏覽器中的Window.sessionStorage 這與 localStorage 類似,但僅在瀏覽器打開期間持續存在(類似於 session cookie 的生命周期)並且與 localStorage 不同,每個選項卡或 window 都有自己的 sessionStorage。 與 localStorage 一樣,每個源都有自己的 sessionStorage,一些來自一個源的頁面無法訪問來自不同源的頁面的 sessionStorage,即使它們都加載到同一個窗口/選項卡中也是如此。


為了更具體地幫助您處理您的申請,我們必須了解您想要跟蹤的 state 的每一部分及其用途。 只有這樣我們才能建議哪種機制最適合存儲它。

req.session當用戶訪問該站點時,它會為用戶創建一個新的 session object 並為他們分配一個 cookie。 每當用戶再次從同一個客戶端請求時,cookie 被檢查,發送到服務器進行處理,並更新存儲的 session 信息。

Cookies、Local Storage(LS)和Session Storage(SS)的區別如下。

  1. Cookies 在服務器端處理,而 LS 和 SS 數據永遠不會發送到服務器。 它們存儲在本地。
  2. Cookie 的存儲容量最大為 4 KB,而 LS 和 SS 則超過 5 MB。
  3. Cookies 主要只存儲 session id。 而 LS 和 SS 可以存儲更多信息,例如用戶信息或頁面瀏覽歷史記錄。
  4. 當用戶關閉選項卡(會話結束)時,SS 被清除。 而Cookies可以通過清除cookies來刪除,LS可以通過刪除瀏覽器緩存來清除。

如果我想起其他任何事情,我會更新答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM