切換語言為:簡體
客戶端儲存機制SessionStorage、LocalStorage 以及 Cookie 詳細介紹及對比

客戶端儲存機制SessionStorage、LocalStorage 以及 Cookie 詳細介紹及對比

  • 爱糖宝
  • 2024-09-18
  • 2042
  • 0
  • 0

SessionStorage、LocalStorage 和 Cookie 都是瀏覽器提供的客戶端儲存機制,作為瀏覽器的內建物件使用。這些物件的主要目的是允許在客戶端(使用者的瀏覽器)儲存和管理資料,以支援無伺服器通訊的應用場景。

SessionStorage 和 LocalStorage:作為 HTML5 引入的新 API,它們屬於 Web Storage API,透過 JavaScript 操作,可以在客戶端儲存較大規模的資料。這些儲存機制的作用範圍僅限於瀏覽器(客戶端),不會自動與伺服器通訊。

Cookie:Cookie 是較早的儲存機制,既能用於客戶端儲存資料,也能透過 HTTP 請求自動與伺服器進行互動。與 Web Storage API 不同,Cookie 是基於 HTTP 協議設計的,可以透過設定適當的屬性(如 HttpOnly、Secure 等)來增強與伺服器通訊的安全性和控制。

Cookie

Cookie 是一種用於在客戶端和伺服器端之間傳遞資料的儲存機制,通常用於會話管理、使用者認證、偏好設定等。它的特點是可以長期儲存。與 SessionStorage 和 LocalStorage 不同的是,Cookie是由瀏覽器傳送給伺服器的,因此可以被伺服器端讀取。

# 特點

 • 儲存大小:每個 Cookie 大小限制在 4KB 左右。
 • 生命週期:可以透過 expires 或 max-age 屬性設定過期時間,預設在會話結束時清除。
 • 作用域:可以設定作用域(domain 和 path),使得 Cookie 適用於指定的子域和路徑。
 • Cookie 會自動隨 HTTP 請求傳送到伺服器(可以透過 HttpOnly 和 Secure 屬性加強安全)。

# 使用場景

 • 使用者認證(如會話標識 Session ID)。
 • 跨頁面、跨會話的使用者偏好儲存(如語言、主題設定等)。
 • 伺服器和客戶端之間的資料傳遞。

# 使用方式

 // 使用 JavaScript 操作 Cookie:
 // 設定Cookie
 document.cookie = "username=John; expires=Fri, 31 Dec 2024 12:00:00 UTC; path=/";

 // 讀取Cookie
 const cookies = document.cookie;

 // 刪除Cookie(將expires設定為過去時間)
 document.cookie = "username=John; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/";

SessionStorage

SessionStorage 是一種在瀏覽器端儲存資料的方式,它的特點是儲存的資料僅屬於單個瀏覽器選項卡和視窗,瀏覽器關閉或者選項卡關閉時,SessionStorage 中的資料也會被清除。

# 特點

 • 儲存大小:通常為 5MB 左右。
 • 生命週期:僅在頁面會話期間有效,關閉頁面或標籤後資料會被刪除。
 • 作用域:同源(同協議、同域名、同埠)下的不同頁面獨立,不共享資料。

# 使用場景

 • 用於儲存在當前會話中臨時的資料,如表單的臨時資料、使用者操作狀態等。
 • 不需要跨頁面或跨會話儲存資料。

# 使用方式

 // 儲存資料
 sessionStorage.setItem('key', 'value');

 // 讀取資料
 const data = sessionStorage.getItem('key');

 // 刪除資料
 sessionStorage.removeItem('key');

 // 清除所有資料
 sessionStorage.clear();

# 補充注意

 對於SessionStorage可能一直存在一個誤區,在Chrome瀏覽器89版本前,
 當前會話頁面指的是當瀏覽器視窗沒有關閉時,視窗內同域網站可以共享此資料(同源瀏覽器多個視窗不共享),

 當頁面全部關閉或視窗關閉後,sessionStorage資料會被摧毀,
 所以你用a標籤跳轉還是js跳轉都會共享SessionStorage。

 而在2021年3月初Chrome瀏覽器進行了批次更新,更新到89版本後,
 透過a標籤target="_blank"跳轉到新頁面時SessionStorage就會丟失。
 Chrome這一更新可能會導致很多網站的SessionStorage丟失,頁面可能直接就崩掉了。

LocalStorage

LocalStorage 也是瀏覽器端的儲存方式,但與 SessionStorage 不同,它的特點是儲存的資料不會被瀏覽器關閉或選項卡關閉所影響,關閉瀏覽器後,資料依然會儲存。可以長期儲存在使用者裝置中直到被清除。LocalStorage 中儲存的資料可以在同一域名下的不同頁面中共享。

# 特點

 • 儲存大小:通常為 5MB 左右。
 • 生命週期:永久儲存,直到使用者或程式主動刪除。
 • 作用域:同源下的所有頁面共享資料。

# 使用場景

 • 用於儲存長期有效的資料,如使用者設定、登入狀態等。
 • 可以在不同頁面或下次訪問時使用同一儲存資料。

# 使用方式

 // 儲存資料
 localStorage.setItem('key', 'value');

 // 讀取資料
 const data = localStorage.getItem('key');

 // 刪除資料
 localStorage.removeItem('key');

 // 清除所有資料
 localStorage.clear();

總結

特性 Cookie SessionStorage LocalStorage
儲存大小 每個 Cookie 限制為 4KB 約 5MB 約 5MB
生命週期 由伺服器或客戶端指定過期時間 僅會話期間有效,頁面關閉即清除 永久儲存,除非手動刪除
作用域 可以在同源或子域共享 同源下的頁面獨立,不共享資料 同源下的所有頁面共享
資料與伺服器互動 自動隨 HTTP 請求傳送到伺服器 不隨請求傳送到伺服器 不隨請求傳送到伺服器
使用場景 使用者認證(會話、識別符號) 臨時資料(表單臨時資料、狀態) 長期資料(使用者設定、購物車)
安全性 透過 HttpOnly 屬性可增強安全性 只能在客戶端讀取,安全性較高 只能在客戶端讀取,安全性較高

總結:SessionStorage 和 LocalStorage 是現代瀏覽器為前端開發者提供的獨立於伺服器的儲存方式,而 Cookie 則是傳統的儲存和通訊機制,可以與伺服器共享資訊。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.