【计算机网络】前端基础知识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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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的核心优势在于其模块化设计和高度可扩展…