【計算機網絡】前端基礎知識Cookie、localStorage、sessionStorage 以及 Token

一、先搞懂:為什么需要這些“存儲工具”?

網頁是“無狀態”的——比如你登錄一個網站,瀏覽器和服務器每次通信都是獨立的,服務器默認記不住你是誰。為了讓服務器“記住”用戶狀態(比如登錄狀態、購物車內容),或者讓瀏覽器自己保存一些數據(比如用戶偏好),就需要各種存儲技術。

二、四大核心技術對比表

特性CookielocalStoragesessionStorageToken(令牌)
本質服務器發送給瀏覽器的小文本文件瀏覽器本地存儲(無服務器參與)瀏覽器本地存儲(無服務器參與)服務器生成的字符串(通常存在 Cookie 或 Storage 中)
存儲大小很小(約 4KB)較大(5-10MB)較大(5-10MB)大小取決于類型(JWT 通常幾百字節)
生命周期可設置過期時間(如 7 天),默認關閉瀏覽器失效永久存儲,除非手動刪除僅當前標簽頁會話有效通常有過期時間(如 2 小時)
與服務器交互每次請求自動發送給服務器不自動發送,需手動處理不自動發送,需手動處理需手動添加到請求頭(如 Authorization
安全性可設置 HttpOnly(防 JS 讀取)、Secure(僅 HTTPS 發送)明文存儲,JS 可直接讀取明文存儲,JS 可直接讀取需妥善保管,泄露會有安全風險
典型用途身份識別(如登錄狀態)、記住密碼保存用戶偏好(如主題、語言)臨時緩存(如表單草稿)API 接口身份驗證(替代 Cookie 無狀態驗證)

在這里插入圖片描述

sessionStorage 里存儲的是鍵值對數據,其中可能有 token,但不代表 sessionStorage 里所有內容都叫 token
auth_token里存的是后端返回的jwt數據

這里我之所以把jwt的認證數據放到sessionstorage里,而不是cookies,是因為基于 localhost 本地服務 + 多標簽頁共享認證 的場景,選擇 sessionStorage

用開發一個本地的多用戶登錄同一域名的情況來解釋

比如說我為localhost:8080/merchant配置了一個商家登錄頁,我登陸之后,想要在新開一個標簽頁,登錄另一個商家,在嘗試后發現,頁面回到了之前登陸的地方,這里體現了 localStorage的特性

localStorage 的特性

  • localStorage 的特點是在同一域名下(這里是 localhost:8080 ),所有標簽頁都能訪問和修改相同的數據。當你在一個標簽頁登錄,使用 localStorage 存儲登錄信息(比如用戶 ID、JWT 等),然后在另一個標簽頁再次登錄時,新的登錄信息寫入 localStorage,就會覆蓋掉之前存儲的內容,從而導致之前的登錄狀態丟失。

sessionStorage 的方案分析

  • 標簽頁隔離:sessionStorage 只在當前標簽頁有效,不同標簽頁之間的 sessionStorage 數據是相互獨立的,這樣可以避免不同標簽頁登錄狀態相互干擾,每個標簽頁可以保持各自的登錄狀態 ,滿足你登錄多個商家,且每個頁面獨立維護登錄態的需求。

Cookie 的方案分析

  • 自動發送:Cookie 會在每次 HTTP 請求時自動被發送到服務器,無需前端手動處理傳遞登錄憑證的操作,對于后端驗證登錄狀態非常方便。
  • 安全性可配置:可以設置 HttpOnly 屬性,使得 JavaScript 無法讀取 Cookie 內容,大大降低了 XSS 攻擊時登錄憑證被盜取的風險;設置 SameSite 屬性,可以有效防御跨站請求偽造(CSRF)攻擊;設置 Secure 屬性后,Cookie 只會在 HTTPS 連接下發送(雖然你當前是 HTTP 環境,但后續如果切換到 HTTPS ,這個屬性會增強安全性)。
  • 跨標簽頁共享:在同一域名下,不同標簽頁之間可以共享 Cookie,方便統一管理登錄狀態。(顯然我要的是同一域名下,不同標簽頁區分不同用戶所以 sessionStorage 更好) 而同域 Cookie 全局共享

三、逐個詳解

1. Cookie:服務器給瀏覽器的“身份證”
  • 工作流程
    當你登錄網站時,服務器驗證通過后,會生成一個包含用戶信息的 Cookie,通過響應頭發給瀏覽器。瀏覽器會把這個 Cookie 保存起來,之后每次訪問該網站時,瀏覽器都會自動把 Cookie 放在請求頭里發給服務器,服務器通過 Cookie 就知道“你是誰”了。

  • 舉個例子
    你登錄微信網頁版,服務器給你一個 Cookie 包含 userid=123。之后你刷新頁面,瀏覽器自動把這個 Cookie 發給服務器,服務器一看 userid=123,就知道是你,不用重新登錄。

    由于 同域cookies全局共享 的特性,你后續使用網頁微信的 聊天功能,加好友功能,等等,這些同一域內 所有需要認證的不同路由 都不需要再輸一遍賬號密碼了

  • 關鍵設置

    • expires/max-age:設置過期時間(如 max-age=604800 表示 7 天后失效)。
    • HttpOnly: true:禁止 JS 讀取 Cookie(防 XSS 攻擊,保護登錄信息)。
    • Secure: true:僅在 HTTPS 連接時才發送 Cookie(更安全)。
    • SameSite: Strict:限制跨站請求時不發送 Cookie(防 CSRF 攻擊)。
  • 如何操作
    前端 JS 可以讀寫非 HttpOnly 的 Cookie:

    // 寫入 Cookie(簡單方式,復雜設置需用 document.cookie 字符串拼接)
    document.cookie = "username=張三; max-age=604800; path=/";// 讀取所有 Cookie(字符串形式,需自己解析)
    console.log(document.cookie); // "username=張三; theme=dark"
    
2. localStorage:瀏覽器的“長期記事本”
  • 特點:存了就一直有,除非用戶手動刪除(比如清除瀏覽器數據),所有同源標簽頁都能共享。

  • 舉個例子
    你在網站設置了“深色模式”,前端用 localStoragetheme: "dark"。下次打開該網站,前端讀取這個值,自動顯示深色模式,不用再重新設置。

  • 如何操作

    // 存數據
    localStorage.setItem("theme", "dark");
    localStorage.setItem("userPrefs", JSON.stringify({ fontSize: 16 }));// 讀數據
    const theme = localStorage.getItem("theme"); // "dark"
    const prefs = JSON.parse(localStorage.getItem("userPrefs"));// 刪數據
    localStorage.removeItem("theme"); // 刪除單個
    localStorage.clear(); // 清空所有
    
3. sessionStorage:瀏覽器的“臨時草稿紙”
  • 特點:只在當前標簽頁有效,關閉標簽頁就自動刪除,不同標簽頁(即使同源)也不共享。

  • 舉個例子
    你在填寫一個很長的表單(比如注冊信息),填到一半不小心刷新了頁面。如果前端用 sessionStorage 實時保存你的輸入,刷新后可以讀取回來,不用重新填寫。

  • 如何操作:和 localStorage 完全一樣,只是把 localStorage 換成 sessionStorage

    sessionStorage.setItem("formDraft", JSON.stringify({ username: "張三" }));
    const draft = JSON.parse(sessionStorage.getItem("formDraft"));
    
4. Token:API 接口的“通行證”
  • 本質:服務器生成的一串字符串,包含用戶身份信息(如用戶 ID、過期時間),用于 API 接口的身份驗證。

  • 工作流程

    1. 用戶登錄成功后,服務器生成 Token 并返回給前端。
    2. 前端把 Token 存在 localStorage/sessionStorage 或 Cookie 里。
    3. 之后調用 API 時,前端手動把 Token 放在請求頭里(如 Authorization: Bearer xxxx)。
    4. 服務器驗證 Token 有效性,有效則返回數據,無效則要求重新登錄。
  • 舉個例子
    你用手機 App 登錄某個服務,App 會保存 Token。之后你刷首頁、看消息,App 每次都會把 Token 發給服務器,證明“是已登錄的用戶”。

  • 為什么用 Token
    比傳統 Cookie 更靈活,適合跨域場景(如前后端分離項目、App 與服務器通信)。

四、核心區別總結

  1. 是否自動發給服務器

    • Cookie:是(每次請求都帶)。
    • 另外三個:否(需手動處理)。
  2. 生命周期

    • localStorage:永久(除非手動刪)。
    • sessionStorage:當前標簽頁生命周期。
    • Cookie/Token:可設置過期時間。
  3. 安全性

    • 敏感信息(如登錄憑證)優先用 Cookie(帶 HttpOnly)Token(存在內存,不用 localStorage)
    • 非敏感信息(如用戶偏好)用 localStorage。
  4. 適用場景

    • 登錄狀態維持:Cookie(傳統網站)或 Token(前后端分離)。
    • 長期保存用戶設置:localStorage。
    • 臨時緩存:sessionStorage。

五、常見誤區

  1. 不要用 localStorage 存密碼、Token 等敏感信息——容易被 JS 讀取(XSS 攻擊風險)。
  2. Cookie 不是越多越好——每個 Cookie 4KB 上限,且每次請求都發送,會增加網絡開銷。
  3. 刷新頁面時,sessionStorage 不會消失(只有關閉標簽頁才會),而頁面跳轉(同域)時會保留。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920585.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【語法】【C+V】【mermaid】本身常用圖表類型用法快查【CSDN不支持,VSCODE可用】

文章目錄 Mermaid 簡介Mermaid 由三部分組成Mermaid 的使用方法復雜圖表結構的技巧餅圖簡介餅圖語法餅圖示例雷達圖簡介雷達圖語法雷達圖語法細節標題軸曲線選項 雷達圖示例時間線簡介時間線語法時間線示例樹形圖簡介樹形圖語法樹形圖示例數據包圖簡介數據包圖語法1&#xff1a…

不止效率工具:AI 在文化創作中如何重構 “靈感邏輯”?

一、引言1.1 AI 創作的崛起在當今時代,AI 技術在文化創作領域的迅猛發展已成為不可忽視的現象。從文字創作領域中,AI 能夠快速生成小說、詩歌,一些新聞媒體也開始運用 AI 撰寫新聞稿件;到視覺藝術方面,AI 繪畫軟件能依…

軟考-系統架構設計師 專家系統(ES)詳細講解

個人博客:blogs.wurp.top 一、ES的核心概念與價值 1. 什么是專家系統(ES)? 專家系統是一種模擬人類專家解決特定領域問題的智能計算機程序系統。它運用特定領域內大量專家水平的知識和經驗,進行推理和判斷&#xff…

Vue3+TS+Element-Plus+el-tree創建樹節點

1、一級樹應用效果&#xff1a;代碼&#xff1a;MaterialCategory.vue<script setup lang"ts" name"MaterialCategory"> ...... // 創建樹&#xff08;一級樹&#xff09; const createTree (dataList: IMaterialCategory[]) > {// 將原始數據轉…

C++基礎(④鏈表反轉(鏈表 + 迭代 / 遞歸))

鏈表反轉&#xff08;鏈表 迭代 / 遞歸&#xff09; 題目描述&#xff1a;給你單鏈表的頭節點 head&#xff0c;請你反轉鏈表&#xff0c;并返回反轉后的鏈表頭節點。 示例&#xff1a;輸入鏈表 1→2→3→4→5 → 輸出 5→4→3→2→1。 思路提示&#xff1a;迭代法&#xff1a…

面向企業級產品開發的自動化腳本實戰

引言&#xff1a; 在產品開發團隊中&#xff0c;設計師、產品經理和工程師之間的協作常常伴隨著大量重復性工作&#xff1a;手動整理設計稿鏈接、更新產品需求文檔、同步項目狀態...這些工作不僅耗時&#xff0c;還容易出錯。本文將帶你編寫一個Python腳本&#xff0c;自動化這…

科技賦能生態,智慧守護農林,匯嶺生態開啟農林產業現代化新篇章

在我國&#xff0c;農林業作為國民經濟的基礎產業&#xff0c;不僅關乎國家糧食安全與生態平衡&#xff0c;更是鄉村振興戰略實施的核心領域。近年來&#xff0c;國家高度重視“三農”問題&#xff0c;大力推進鄉村振興戰略&#xff0c;強調要實現農業農村現代化&#xff0c;促…

貪心算法面試常見問題分類解析

一、貪心算法問題 1. 跳躍游戲系列 能否到達終點: def canJump(nums):max_reach = 0for i in range(len(nums)):if i > max_reach:return Falsemax_reach = max(max_reach, i + nums[i])return True 最少步數: def jump(nums):jumps = end = max_pos = 0for i in range(l…

【3D入門-指標篇上】3D 網格重建評估指標詳解與通俗比喻

一、指標對比表格指標名稱核心定義計算關鍵步驟通俗比喻典型應用場景Chamfer距離雙向平均幾何距離采樣點→計算最近鄰距離→取平均沙灘沙粒的平均距離差評估服裝輪廓、褶皺的細微差異法向量一致性表面法向量方向匹配度計算法向量點積→取絕對值→平均刺猬刺的朝向一致程度評估布…

補題報告08

題目背景某天&#xff0c;奇異博士在紐約圣所研究維山帝之書時&#xff0c;發現了連接不同多元宇宙的傳送門網絡......題目描述經研究&#xff0c;奇異博士發現每個傳送門都有固定的 “時間代價”—— 正數表示雙向通行&#xff08;往返時間代價相同均為正值&#xff09;&#…

馬斯克殺入AI編程!xAI新模型Grok Code Fast 1發布,深度評測:速度、價格與API上手指南

AI 編程的賽道&#xff0c;又迎來一位重量級玩家——馬斯克的 xAI。 就在最近&#xff0c;xAI 悄然發布了一款專為編碼而生的新模型&#xff1a;Grok Code Fast 1。這款模型最初以代號“Sonic”在內部流傳&#xff0c;如今正式亮相&#xff0c;便憑借其 256K 超長上下文、驚人的…

GaussDB 數據庫架構師修煉(十八) SQL引擎-計劃管理-SPM

1 背景由于業務數據的變化或者數據庫版本的升級&#xff0c;可能導致SQL的執行計劃發生變化&#xff0c;這種變化不一定是正收益&#xff0c;這時需 要一個防止計劃劣化的機制。該機制需適用于版本升級時固化計劃防止計劃跳變等場景。2 SPM 的功能SPM(SQL Plan Manager)功能&a…

數字IC前端設計——前仿篇(VCS,DVE,Verdi)

文章目錄引言一、軟件介紹1. VCS2. DVE3. Verdi二、VCS的使用1. VCS的編譯流程2. 常用的編譯選項1&#xff09;基礎編譯選項2&#xff09;調試相關選項3&#xff09;性能優化選項4&#xff09;文件和路徑選項3. 常用仿真選項1&#xff09;基礎仿真選項2&#xff09;運行控制選項…

20250826--inter

一、非對稱加密的應用 非對稱加密應用-CSDN博客 2、怎么避免跨站腳本攻擊&#xff0c;包括還有其他的一些web安全&#xff0c;怎么做的 網頁安全XSS攻擊和CSRF攻擊_csrf共計-CSDN博客 3、前端異常監控&#xff0c;性能監控&#xff0c;埋點&#xff0c;怎么做的 &#xff1f…

MongoDB Shell

MongoDB官方提供的單獨命令行工具 MongoDB Shell Download | MongoDB 下載MongoDB Shell windows系統打開&#xff0c;直接在解壓后的目錄里面找到bin目錄 然后雙擊打開mongosh.exe這個文件 看到這個命令行就表示Mongo Shell已經啟動成功了 test代表 當前正在使用的數據庫的…

Docker03-知識點整理

Docker03-知識點整理 文章目錄Docker03-知識點整理1-參考網址2-知識整理2-思考題1-Docker image和Docker Native image有什么區別1. Docker Image&#xff08;Docker 鏡像&#xff09;定義特點構建和使用示例2. Docker Native Image&#xff08;通常指 GraalVM Native Image 結…

華為 eNSP 從入門到精通:企業級網絡仿真全攻略

一、eNSP 簡介華為 eNSP&#xff08;Enterprise Network Simulation Platform &#xff09;是面向企業網絡的虛擬化仿真平臺&#xff0c;其核心架構基于分布式虛擬化引擎和真實設備鏡像&#xff0c;具備以下技術亮點&#xff1a;高度仿真&#xff1a;可模擬華為 AR 路由器、x7 …

docker compose設置命令別名的方法

docker compose名字比較長&#xff0c;輸入比較費事&#xff0c;可以為它設置別名來簡化輸入。1、Linux編輯~/.bash_aliasesalias dcdocker-compse編輯~/.bashrc&#xff0c;確認其包含以下內容&#xff1a;if [ -f ~/.bash_aliases ]; then. ~/.bash_aliasesfi重新加載 ~/.bas…

【RAGFlow代碼詳解-10】文本處理和查詢處理

概述 文本處理和查詢處理系統將自然語言查詢轉換為與 RAGFlow 的文檔存儲后端配合使用的優化搜索表達式。該系統支持中英文文本處理&#xff0c;具有專門的標記化、術語加權和查詢增強技術。核心組件 FulltextQueryer 類 FulltextQueryer 類是查詢處理和文本分析的主要接口。它…

利用機器學習優化Backtrader策略原理與實踐

1. Backtrader框架概述 1.1 Backtrader簡介 Backtrader是一個功能強大且靈活的Python庫&#xff0c;專為量化交易策略的開發、測試和執行而設計。它提供了豐富的功能&#xff0c;包括數據獲取、策略開發、回測、優化和繪圖等。Backtrader的核心優勢在于其模塊化設計和高度可擴展…