当前位置: 首页 > news >正文

localStorage vs sessionStorage

localStorage vs sessionStorage


1. 它们是什么?

二者都属于Web Storage API

  • 都是浏览器提供的键值对存储(Key-Value)。
  • 只支持存字符串(对象需要JSON.stringify/parse)。
  • 同源策略限制:同协议 + 同域名 + 同端口才能互相访问。

2. 核心差异对比(表格)

维度localStoragesessionStorage
生命周期长期:除非手动清除(代码删除/用户清理浏览器数据)会话级:关闭当前标签页/窗口即清除
刷新页面保留保留
关闭标签页保留清除
新开同域标签页可共享(同源下可读同一份)不共享(每个标签页独立)
容量(大致)通常 5MB 左右(各浏览器实现有差异)通常 5MB 左右(各浏览器实现有差异)
APIsetItem/getItem/removeItem/clearlocalStorage
典型用途记住登录态、主题设置、长期偏好临时表单草稿、一次性流程状态、单标签页会话缓存

3. 代码层面的共同点

3.1 写入与读取

// 写入localStorage.setItem('token','xxx')sessionStorage.setItem('token','xxx')// 读取constt1=localStorage.getItem('token')constt2=sessionStorage.getItem('token')// 删除localStorage.removeItem('token')sessionStorage.removeItem('token')

3.2 存对象(需要序列化)

constuser={id:1,name:'Alice'}localStorage.setItem('user',JSON.stringify(user))constparsed=JSON.parse(localStorage.getItem('user')||'null')

4. “点击刷新仍保持登录态”的关键点

  • 刷新会导致 JS 内存状态(如 Pinia/Vuex/组件 state)全部丢失。
  • 只要 token 存在于持久化存储中localStoragesessionStorage),应用重新加载后仍能读到 token,并在请求拦截器里带上。

区别在于:

  • localStorage:关闭浏览器/标签页后再次打开仍可保持登录(除非 token 过期或被清理)。
  • sessionStorage:关闭当前标签页就需要重新登录。

5. 登录态场景怎么选?

5.1 管理后台常见选择:localStorage

原因:

  • 管理后台用户通常希望“记住登录态”,避免频繁登录。
  • 支持多标签页共享同一登录态(同源下)。

方法:

  • 登录成功后setToken(token)写入localStorage
  • request.js每次请求前getToken()读出并写入请求头

5.2 何时更适合sessionStorage

  • 需要更“严格”的会话:
    • 关闭标签页就自动退出
    • 不希望 token 在磁盘上长期保留
  • 单标签页流程状态:
    • 多步骤表单
    • 临时筛选条件
    • 一次性引导流程

6. 安全性与风险(重要)

6.1 XSS 风险:二者都一样

  • localStoragesessionStorage都能被页面 JS 读取。
  • 一旦站点存在 XSS 漏洞,攻击脚本可以直接读走 token

因此:

  • 防 XSS(输入输出转义、CSP、依赖治理)比“选 local 还是 session”更关键。

6.2 更安全的替代:HttpOnly Cookie(思路)

若你想降低“JS 可读 token”的风险,可考虑把 token 放在:

  • 服务端下发的HttpOnlyCookie(JS 不可读)

但这会带来:

  • CSRF 防护需求(SameSite、CSRF Token 等)
  • 与后端鉴权方式的配套改造

7. 实用选型建议

  • 想要“关闭浏览器/标签页后仍记住我”:选localStorage(或更安全的 Cookie 方案)。
  • 想要“关闭标签页就退出”:选sessionStorage
  • 临时状态(一次流程、草稿):优先sessionStorage
  • 不管选哪个:都需要重视 XSS 风险;登录态过期时要做一致的清理与跳转。
http://www.jsqmd.com/news/500377/

相关文章:

  • 伴侣间的信任感被破坏后,如何重建与修复?
  • ENVI直接打开Landsat的C2L2数据(landsat5/8/9)
  • Linux传输层TCP,UDP相关内容
  • SEO_避开这些常见误区,让你的SEO事半功倍(435 )
  • 聊聊银川面部祛痣专业机构,费用大概多少钱? - 工业推荐榜
  • 京东e卡回收哪家强?深度解析热门回收渠道优劣 - 团团收购物卡回收
  • 觉得360讨厌?想卸载?那是你不会用
  • openclaw[龙虾]禁用版本升级提示
  • UL4200A认证全流程:从申请到证书获取
  • 网络编程第一天学习笔记(重点:UDP 协议)
  • 【全网唯一】第一篇 我要创造一门全新中文编程语言——华夏本源语言
  • 2026年壁挂新风系统选购指南:8款主流品牌深度横评 - 新闻快传
  • 探讨2026年深圳GH4169镍基合金钢板性价比,哪家更优? - 工业品网
  • 讲讲GH4169镍基合金费用,深圳地区哪家收费合理? - 工业品牌热点
  • 2026-3-18
  • neo4j知识图谱+大模型教育应用赋能教育技术学专业
  • 注意!选择京东e卡回收渠道前需要了解的3个技巧 - 团团收购物卡回收
  • Anaconda被误删后抢救手册
  • 2026年新风系统推荐:第五季凭什么入选TOP5 - 新闻快传
  • 【claude code】基于java+springboot的校园餐厅点餐网站、外卖点餐管理系统
  • 从“亡羊补牢”到“规则先行”:金仓数据库的主动防御之道
  • ArkUI 为什么看起来简单,却很难写好
  • 3月19日直播丨加速开发,释放生产力的必备利器!
  • python小技巧
  • 别再被割韭菜了!AI Agent学习资源大公开
  • 面试必杀技:彻底搞懂 JVM 内存模型与区域划分(上篇)
  • 算法小练-可分解的正整数
  • 2026年热门的V型组合式过滤器厂家推荐:金属网初效过滤器/初效平板式过滤器/苏州活性炭袋式过滤器厂家实力与用户口碑参考 - 行业平台推荐
  • 华三(H3C)交换机密码策略配置指南
  • 大SoC芯片+域融合趋势下的Hypervisor应用