你知道 Cookie、LocalStorage、SessionStorage 的使用時機嗎?

更新於 發佈於 閱讀時間約 4 分鐘

— 從儲存機制聊到前後端分離架構下,登入狀態怎麼“記憶”

有一天,夥伴問我:「欸,那個 localStorage 跟 cookie 差在哪?sessionStorage 又是什麼?」

這個問題,不只是基礎,更是很多架構選擇的起點。

所以今天,我想從這三個常見的「瀏覽器端儲存技術」聊起,帶你一起思考一個非常實際的問題:在沒有後端 Session 的情況下,我們是怎麼記得一個人有登入的?


🔸 Cookie、localStorage、sessionStorage 是什麼?

這三個都是「在使用者瀏覽器端儲存資料」的方式,但他們的用途、特性與限制有些不同。

raw-image



它們的「使用時機」是什麼?

這邊我用幾個簡單情境來說明:

  • 登入之後要記住狀態?→ Cookie 比較適合,尤其是伺服器要參與身份驗證的情況。
  • 希望跨頁、跨次開啟瀏覽器還能記得偏好設定(例如深色模式)?→ localStorage 是不錯的選擇。
  • 表單填到一半,怕刷新頁面資料消失?→ sessionStorage 派上用場。

這三種方式,其實是依照「儲存時間長短」、「資料是否送給後端」、「資料大小」來做選擇。


那麼,「登入狀態」到底該放哪裡?

傳統的 Web 架構(如 Laravel Blade 或 PHP)會在伺服器端維護 Session,並搭配 Cookie(通常是 PHPSESSID)來記住誰是誰。

但現在愈來愈多網站是「前後端分離」的架構(如 Vue + Laravel API、React + Node.js),這時候情況就不一樣了:

  • 前端不再透過 Cookie 自動送出 Session ID
  • 後端變成純 API,stateless,無狀態
  • 沒有「Session」,那登入狀態怎麼辦?

前後端分離時,「登入狀態」怎麼記?

答案通常是這三個方式之一:

  1. JWT(JSON Web Token)
    • 登入成功後,後端回傳一組加密的 Token
    • 前端存下來(localStorage 或 cookie)
    • 之後每次呼叫 API,把 Token 放在 Header 中(如 Authorization: Bearer xxx)
    • 後端驗證 Token 來辨識使用者
  2. Cookie + Token
    • 有些架構會把 Token 放在 HttpOnly 的 Cookie 中(增加安全性)
    • 但這要搭配後端支援 Cookie-based 認證(例如 Laravel Sanctum)
  3. Refresh Token 策略
    • Access Token 時效短(如 15 分鐘),Refresh Token 存放更長時間
    • 可以避免 Token 過期就整個登出

最後聊一個思考點:

雖然我們經常會問:「登入狀態該放在哪裡?」

但其實真正該問的應該是:

「我要達到什麼樣的使用體驗與安全性?」

你是希望「跨頁不掉狀態」?還是「多裝置可登入」?

你是希望「Token 不被 JS 存取」?還是「前端能靈活控制登出邏輯」?

不同的需求,會有不同的技術選擇。

我們現在的問題已經不是「用 cookie 還是 localStorage」這麼單純,而是:

前後端分離架構下,如何設計一個兼顧安全與使用體驗的登入狀態記憶機制?

這個問題,值得每一個工程師細細琢磨。

留言
avatar-img
留言分享你的想法!
avatar-img
詹姆士的軟體易開罐
26會員
86內容數
這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
Thumbnail
※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
整合測試的時候突然遇到一個突然無法登入產品網站的問題,把程式模組單獨拉出來測試又正常,觀察測試報告後發現出現發生登入異常的時間點並不固定,而且只要發生就會連續發生一段時間,程式被中斷掉。後來確認問題在...
Thumbnail
整合測試的時候突然遇到一個突然無法登入產品網站的問題,把程式模組單獨拉出來測試又正常,觀察測試報告後發現出現發生登入異常的時間點並不固定,而且只要發生就會連續發生一段時間,程式被中斷掉。後來確認問題在...
Thumbnail
之前在 學習筆記 | 關於 Cookie、Session、Token 這篇筆記有提到,瀏覽器需要帶著使用者的身分訊息或經過身分驗證後取得的Token(令牌),才能向伺服器請求資源,那麼瀏覽器就必須有個空間來儲存這些 Token 資訊,這篇就是要來記錄瀏覽器常見的儲存空間啦~
Thumbnail
之前在 學習筆記 | 關於 Cookie、Session、Token 這篇筆記有提到,瀏覽器需要帶著使用者的身分訊息或經過身分驗證後取得的Token(令牌),才能向伺服器請求資源,那麼瀏覽器就必須有個空間來儲存這些 Token 資訊,這篇就是要來記錄瀏覽器常見的儲存空間啦~
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
Thumbnail
深入了解使用 Cookie 實現客戶端數據存儲的技巧和最佳實踐。本文詳細解釋了 Cookie 的基本概念、限制、原生寫法,並推薦了一個實用的 JavaScript Cookie 套件,附帶實用 Demo 和原始碼。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News