浏览器存储实战:localStorage/sessionStorage/cookie 用法详解|JS 进阶必会篇

news2026/3/16 15:33:54
【浏览器存储localStorage/sessionStorage/cookie】【前端开发常见场景】从【核心特性与用法】到【落地实操选型】彻底搞懂浏览器存储的最佳用法避开跨tab不同步、容量超限、XSS攻击等高频坑 文章目录一、开篇为什么要关心浏览器存储二、概念扫盲三、localStorage持久化存储3.1 是什么3.2 基本用法3.3 适用场景四、sessionStorage会话级存储4.1 是什么4.2 基本用法4.3 适用场景4.4 常见误区五、cookie会被请求携带的存储5.1 是什么5.2 基本用法5.3 适用场景六、实战场景该用哪个6.1 Token 存储6.2 用户配置主题、语言等6.3 缓存查询条件表格筛选、分页6.4 多步表单的中间状态七、怎么选一张表搞定八、踩坑指南九、小结 本系列专栏导航同学们好我是 Eugene尤金一个拥有多年中后台开发经验的前端工程师~Eugene 发音很简单/juːˈdʒiːn/大家怎么顺口怎么叫就好你是否也有过明明学过很多技术一到关键时候却讲不出来、甚至写不出来你是否也曾怀疑自己是不是太笨了明明感觉会却总差一口气就算想沉下心从头梳理可工作那么忙回家还要陪伴家人。一天只有24小时时间永远不够用常常感到力不从心。技术行业本就是逆水行舟不进则退。如果你也有同样的困扰别慌。从现在开始跟着我一起心态归零利用碎片时间来一次彻彻底底的基础扫盲。这一次我们一起慢慢来扎扎实实变强。不搞花里胡哨的理论堆砌只分享看得懂、用得上的前端干货咱们一起稳步积累真正摆脱“面向搜索引擎写代码”的尴尬。一、开篇为什么要关心浏览器存储日常开发里经常会遇到Token 存哪登录后 token 放在哪、刷新页面怎么不丢用户配置主题、语言、侧边栏收起状态下次打开要记住。列表筛选表格的筛选条件、分页、排序希望刷新后还能保留。这些都要用到浏览器存储。但 localStorage、sessionStorage、cookie 该怎么选场景对应错了就会有跨 tab 不同步、隐私泄露、存不下等问题。下面从概念 → 用法 → 实战场景 → 选型 → 踩坑把三者讲清楚日常该用哪个、为什么这么用、容易踩哪些坑。⬆ 返回目录二、概念扫盲先用一张表看清三者区别特性localStoragesessionStoragecookie生命周期持久化除非手动删除关闭标签页即失效可设置过期时间容量约 5MB约 5MB约 4KB作用域同源下所有页面共享仅当前标签页同源共享可设置 path是否随请求发送否否是每次请求自动带API 风格getItem/setItem同上document.cookie字符串操作一句话记localStorage长期存、全页面共享适合偏好、配置。sessionStorage仅当前标签页、关掉就丢适合临时状态。cookie每次请求都会带上适合需和服务端交互的如认证、会话。⬆ 返回目录三、localStorage持久化存储3.1 是什么localStorage 是持久化存储数据不会过期除非主动删除或用户清除浏览器数据。同源下所有页面共享。⬆ 返回目录3.2 基本用法// 存localStorage.setItem(theme,dark);// 取constthemelocalStorage.getItem(theme);// dark// 删localStorage.removeItem(theme);// 清空所有localStorage.clear();注意只能存字符串。对象需要序列化// 存对象constuserConfig{theme:dark,lang:zh};localStorage.setItem(userConfig,JSON.stringify(userConfig));// 取对象constconfigJSON.parse(localStorage.getItem(userConfig)||{});⬆ 返回目录3.3 适用场景用户主题、语言、侧边栏状态需要持久化的列表筛选、排序、分页表单草稿不敏感数据Token前提是放在合理的安全体系里⬆ 返回目录四、sessionStorage会话级存储4.1 是什么sessionStorage 的生命周期只到当前标签页关闭。新开标签页是新会话数据不共享。⬆ 返回目录4.2 基本用法// 用法和 localStorage 一样sessionStorage.setItem(tempId,abc123);consttempIdsessionStorage.getItem(tempId);sessionStorage.removeItem(tempId);⬆ 返回目录4.3 适用场景当前页的临时数据如多步表单的中间页不希望跨 tab 共享的数据表单防重复提交用的临时标记一些只对当前会话有用的临时 token⬆ 返回目录4.4 常见误区很多人以为 sessionStorage 和“会话”一样关浏览器才清空。实际上关闭标签页→ 数据就没了刷新页面→ 数据还在新开标签页→ 新会话看不到旧数据⬆ 返回目录五、cookie会被请求携带的存储5.1 是什么cookie 是早期方案容量小每次 HTTP 请求会自动带上同域且 path 匹配时。因此常用来存 sessionId、token 等需要和服务端交互的信息。⬆ 返回目录5.2 基本用法cookie 需要手动拼字符串原生 API 不友好// 设置 cookie需手动拼接document.cookietokenabc123; path/; max-age3600;// 1小时过期// 读取 cookieconstcookiesdocument.cookie;// tokenabc123; themedark// 需要自己解析functiongetCookie(name){constmatchdocument.cookie.match(newRegExp((^| )name([^;])));returnmatch?match[2]:null;}getCookie(token);// abc123常用属性说明属性含义path/哪些路径会携带此 cookiemax-age3600多少秒后过期domain.example.com子域名共享Secure仅 HTTPS 传输HttpOnly禁止 JS 访问防 XSS 读 token⬆ 返回目录5.3 适用场景登录凭证sessionId、token尤其是需要服务端校验时与后端交互的会话状态老项目或接口强依赖 cookie 的场景现代项目里很多 token 用 localStorage 存请求时通过Authorization头发送而不再用 cookie。这取决于你的前后端约定和安全方案。⬆ 返回目录六、实战场景该用哪个6.1 Token 存储常见做法有三种方式优点缺点localStorage刷新不丢、跨 tab 共享、实现简单易受 XSS 攻击读走 tokensessionStorage关 tab 即失效相对更安全刷新会丢需配合刷新 token 逻辑cookie (HttpOnly)JS 无法读取防 XSS 偷 token需后端配合设置前后端都要处理建议大部分前后端分离项目用localStorage配合 XSS 防护输入过滤、CSP 等。对安全要求高的项目用HttpOnly cookie由后端设置。仅当前 tab 有效的临时 token用sessionStorage。示例localStorage 存 token// 登录成功后consttokenresponse.data.token;localStorage.setItem(token,token);// 请求拦截器里axios.interceptors.request.use(config{consttokenlocalStorage.getItem(token);if(token){config.headers.AuthorizationBearer${token};}returnconfig;});// 退出登录localStorage.removeItem(token);⬆ 返回目录6.2 用户配置主题、语言等这类配置需要持久化且希望下次打开还是同样的用localStorage// 封装一个简单的配置管理constCONFIG_KEYuserConfig;constdefaultConfig{theme:light,lang:zh,sidebarCollapsed:false};functiongetConfig(){try{constsavedlocalStorage.getItem(CONFIG_KEY);returnsaved?{...defaultConfig,...JSON.parse(saved)}:{...defaultConfig};}catch{return{...defaultConfig};}}functionsetConfig(partial){constconfig{...getConfig(),...partial};localStorage.setItem(CONFIG_KEY,JSON.stringify(config));returnconfig;}// 使用setConfig({theme:dark});constconfiggetConfig();⬆ 返回目录6.3 缓存查询条件表格筛选、分页列表的筛选、排序、分页希望刷新后还能保留用localStorageconstCACHE_KEYuserList_query;// 进入页面时恢复constsavedQueryJSON.parse(localStorage.getItem(CACHE_KEY)||{});this.filterssavedQuery.filters||{};this.paginationsavedQuery.pagination||{page:1,size:10};// 筛选或分页变化时保存functionsaveQuery(filters,pagination){localStorage.setItem(CACHE_KEY,JSON.stringify({filters,pagination}));}// 清空筛选时清除functionclearQuery(){localStorage.removeItem(CACHE_KEY);}⬆ 返回目录6.4 多步表单的中间状态多步表单的中间页只对当前 tab 有效不希望跨 tab 共享用sessionStorage// 第二步填写时保存sessionStorage.setItem(formStep2,JSON.stringify(formData));// 第三步页面加载时恢复conststep2DataJSON.parse(sessionStorage.getItem(formStep2)||{});// 提交成功后清除sessionStorage.removeItem(formStep2);⬆ 返回目录七、怎么选一张表搞定场景推荐理由TokenlocalStorage 或 HttpOnly cookie持久、跨 tab安全要求高用 cookie用户主题、语言、配置localStorage持久化刷新和重开都保留列表筛选、分页、排序localStorage持久化提升使用体验多步表单中间状态sessionStorage仅当前 tab关掉即清空临时防重复提交标记sessionStorage仅当前会话有效需要随请求自动携带的凭证cookie浏览器会自动带上⬆ 返回目录八、踩坑指南坑原因建议存对象报错或乱码只支持字符串用JSON.stringify存JSON.parse取私密模式下 localStorage 可能不可用部分浏览器会限制或清空用 try-catch 包一层失败时降级到内存跨 tab 不同步localStorage 变更不会自动通知其他 tab监听storage事件做同步cookie 超出 4KB单条 cookie 约 4KB 限制大对象改用 localStorage或拆分多个 cookie测试环境数据残留上次测试数据还在测试前localStorage.clear()或单独用测试 keystorage 事件跨 tab 同步当其他 tab 修改了 localStorage当前 tab 会触发storage事件window.addEventListener(storage,(e){if(e.keytheme){// 其他 tab 改了 theme这里同步更新applyTheme(e.newValue);}});注意修改 localStorage 的那个 tab 不会触发只有其他同源页面会收到。⬆ 返回目录九、小结存储方式一句话典型场景localStorage持久、同源共享、不随请求发送用户配置、token、列表筛选缓存sessionStorage当前标签页有效、关掉即丢多步表单、临时标记cookie容量小、随请求自动携带需后端校验的登录凭证记住三点需要持久化、跨 tab用 localStorage仅当前 tab、关掉就丢用 sessionStorage。需要随请求自动携带用 cookie否则优先用 localStorage/sessionStorage。只存字符串对象用JSON.stringify/parse注意容量localStorage 约 5MBcookie 约 4KB。选对存储方式可以少很多莫名其妙的 bug也更符合安全和性能预期。⬆ 返回目录 本系列专栏导航 JS 进阶必会点一、《闭包实战从原理到防抖・节流・缓存JS 进阶必会篇》二、《异步基础Promise async/await 实战JS 进阶必会篇》三、《常用工具函数深拷贝・去重・扁平化手写实战JS 进阶必会篇》四、《事件循环与宏微任务log 顺序实战解析JS 进阶必会篇》五、《设计模式实战单例・发布订阅・策略 JS 轻量用法JS 进阶必会篇》六、《浏览器存储实战localStorage/sessionStorage/cookie 用法详解JS 进阶必会篇》 跟着系列慢慢学把技术功底扎扎实实地打牢 更多内容TS/Vue/工程化等共47篇已整理成「全体系总目录」收藏后可一站式学习 系列总览想系统学习Vue3中后台开发收藏这份「全体系指南」47篇干货从基础到工程化全覆盖《前端基础实战JS/TS与Vue体系化扫盲47 篇完整目录 避坑》 每篇都配套实战场景避坑指南帮你摆脱「面向搜索引擎写代码」的尴尬⬆ 返回目录学习本就是一场持久战不需要急着一口吃成胖子。哪怕今天你只记住了一点点这都是实打实的进步。后续我还会继续用这种大白话、讲实战方式带大家扫盲更多前端基础。关注我不迷路咱们把那些曾经模糊的知识点一个个彻底搞清楚。如果你觉得这篇内容对你有帮助不妨点赞收藏下次写代码卡壳时拿出来翻一翻比搜引擎更靠谱。我是 Eugene你的电子学友我们下一篇干货见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…