0

0

如何操作浏览器存储_JavaScript中localStorage和sessionStorage的区别是什么

夢幻星辰

夢幻星辰

发布时间:2026-01-05 21:11:07

|

969人浏览过

|

来源于php中文网

原创

localStorage永久存储,sessionStorage仅限当前标签页;前者跨页面保留,后者关页即清;均受同源限制、API相同但数据隔离,且均不加密、不可用于存敏感信息。

如何操作浏览器存储_javascript中localstorage和sessionstorage的区别是什么

localStorage 和 sessionStorage 都是浏览器提供的 Web Storage API,但它们的生命周期、作用域和使用场景完全不同。选错一个,轻则数据丢失,重则用户登录态异常。

生命周期:sessionStorage 关闭标签页就清空,localStorage 永久保留(除非手动删)

sessionStorage 的数据只在当前浏览器标签页(tab)内有效,关闭该 tab 后数据立即销毁;即使刷新页面或跳转同域其他路径,数据仍在。localStorage 则会一直保留在本地,直到被代码显式调用 localStorage.removeItem()localStorage.clear() 删除,或用户手动清除浏览器缓存。

常见错误现象:
• 用 sessionStorage 存 token,用户新开一个 tab 访问首页,结果没登录态 → 因为新 tab 是全新 session
• 用 localStorage 存临时表单草稿,用户换设备就找不到了 → 它不跨设备、不跨浏览器

  • 适用场景举例:
     – sessionStorage:多步骤表单的中间状态、临时筛选条件、防重复提交的 nonce 值
     – localStorage:用户主题偏好、长期登录凭证(配合后端 refresh token)、离线缓存的静态资源哈希
  • 注意:两者都受同源策略限制,https://a.comhttps://b.com 互不可见;子域名间也不共享(app.example.comapi.example.com

API 完全一致,但数据隔离:不能互相读写,也不能用同一 key 混淆

它们都提供 setItem()getItem()removeItem()clear() 四个方法,语法一模一样。但底层存储空间完全独立 —— 往 sessionStorage.setItem('user', 'alice') 写入,不会影响 localStorage.getItem('user') 的返回值,反之亦然。

立即学习Java免费学习笔记(深入)”;

卡奥斯智能交互引擎
卡奥斯智能交互引擎

聚焦工业领域的AI搜索引擎工具

下载

容易踩的坑:
• 开发时误把 localStorage 当成“更安全的 sessionStorage”,其实两者都不加密、都可被 JS 直接读取,敏感信息(如密码、原始 token)绝不该存进去
• 在 Vue/React 组件中同时监听 storage 事件,却发现只有 localStorage 变化才触发 —— 正确:sessionStorage 的变更不会触发 storage 事件,这是规范限定的

window.addEventListener('storage', (e) => {
  console.log(e.key, e.oldValue, e.newValue); // 只对 localStorage 生效
});

容量限制和性能差异:都约 5–10MB,但 sessionStorage 更轻量

主流浏览器对两者的单域名存储上限基本一致(通常 5MB 左右),但实际可用值受浏览器实现影响,比如 Safari 的私密模式可能直接禁用 localStorage。sessionStorage 因为生命周期短、不持久化到磁盘,在高频写入场景(如实时编辑器每秒存一次)下内存压力略小,而 localStorage 频繁写入可能触发磁盘 I/O,造成轻微卡顿。

  • 判断是否已满的可靠方式不是查容量,而是捕获异常:
     
    try {
      localStorage.setItem('test', 'x'.repeat(1024 * 1024));
    } catch (e) {
      if (e.name === 'QuotaExceededError') {
        console.error('localStorage 已满');
      }
    }
  • 字符串以外的数据必须序列化:
     localStorage.setItem('config', JSON.stringify({ theme: 'dark', lang: 'zh' }))
     读取时记得 JSON.parse(localStorage.getItem('config')),否则得到的是字符串

真正难的不是记住区别,而是每次调用 setItem 前,得想清楚:这个值要不要跨 tab 共享?关掉页面后还有没有意义?有没有被 XSS 直接偷走的风险?这三个问题没答案,就先别往里写。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

404

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

531

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

308

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

304

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

711

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6062

2023.09.14

Python 深度学习框架与TensorFlow入门
Python 深度学习框架与TensorFlow入门

本专题深入讲解 Python 在深度学习与人工智能领域的应用,包括使用 TensorFlow 搭建神经网络模型、卷积神经网络(CNN)、循环神经网络(RNN)、数据预处理、模型优化与训练技巧。通过实战项目(如图像识别与文本生成),帮助学习者掌握 如何使用 TensorFlow 开发高效的深度学习模型,并将其应用于实际的 AI 问题中。

4

2026.01.07

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 6.1万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号