前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库sessionStorage 生命周期与标签页刷新
浏览浏览器存储与离线数据

sessionStorage 的数据生命周期与标签页或刷新有什么关系?

刷新页面不会清除sessionStorage,而关闭标签页会结束会话。新开标签页默认拥有新的空存储,只有复制标签页或保留opener的window.open才会继承初始数据。生命周期与标签页强绑定。

前端进阶之旅 · 一题精讲更新于 2026.09.05
浏览器#存储与离线数据#离线应用
先看核心答案
理解线索

标签页会话存储

  1. 页面会话每个标签页拥有独立sessionStorage区域
  2. 生命周期关闭标签页结束会话并清除数据
  3. 继承复制window.open可复制初始值但独立

刷新不改变会话,只有关闭标签页才销毁数据。

核心回答

先记住这个答案

sessionStorage的数据归属于当前顶层浏览上下文(即标签页)。刷新当前页面时数据保留,可用于恢复临时状态;关闭标签页或浏览器窗口则终止会话并清除数据。通过window.open打开且保留opener时,新页面会复制一份初始快照,但之后读写互不影响。直接新建标签页或地址栏输入则得到空白存储。

  • 刷新页面数据不丢失
  • 关闭标签页即清除会话数据
  • 新标签页独立,可复制初始值

存储分区与会话续存规则

sessionStorage以“源+顶层浏览上下文”为分区键,每个标签页保存独立的Storage对象。刷新页面时,浏览器复用该标签页的会话,存储数据继续存在。而localStorage按源共享,sessionStorage则与标签页强绑定,这是两者最核心的生命周期差异。

通过window.open打开新窗口且保留opener时,新页面的sessionStorage会先复制一份源页面的内容,但写入互不影响。为阻止这种复制,可使用rel=noopener或显式清除opener。直接输入地址或普通链接跳转不会复制,新标签页得到空白会话存储。

表单草稿:刷新恢复与关闭即删

一个多步骤问卷调查,用户填写过程中可能按F5刷新。开发者在change事件中将输入JSON序列化后写入sessionStorage,页面加载时读取并还原。由于刷新不终止标签页会话,草稿可恢复;关闭标签页后,sessionStorage自动清空,无需手动删除。

若使用localStorage,刷新也能读取,但关闭后数据仍保留,下次访问会残留旧草稿。sessionStorage恰好匹配“单次访问草稿”需求:存活于刷新与恢复,消亡于标签页关闭。这避免了额外清理逻辑,也减少误删风险。

生命周期边界与隐蔽例外

sessionStorage生命周期并非在所有关闭场景下都立即清除。例如浏览器崩溃后若恢复了标签页,部分浏览器会保留原有sessionStorage内容;用户通过“关闭其他标签页”不影响当前标签页,但浏览器扩展或强制清理可能改变行为。因此不可把“关闭标签页即清除”当作绝对保证。

若要严格保证数据只存在于单次页面会话,应在退出流程中主动调用removeItem或clear。复制标签页会复制初始快照,后续独立;若希望每次打开都是全新会话,可在打开链接时用rel=noopener阻止opener关联。将这些边界纳入设计,避免数据串号或残留。

回答前,多想一步

容易答错的地方

刷新会清空sessionStorage
错误认为刷新相当于重新开会话。实际上刷新只是重新加载文档,仍处于同一顶层浏览上下文,sessionStorage数据保留。只有关闭标签页或浏览器进程结束才会清除。
新开标签页能共享sessionStorage
直接通过地址栏或普通链接打开的新标签页,没有opener关联,得到的是全新空白存储。只有通过window.open且保留opener时才可能复制初始值,但之后两边互不影响。
试着用自己的话回答

面试官还会怎么问?

sessionStorage能跨标签页共享吗?

不能直接共享。通过window.open打开的新标签页会继承一份初始副本,但之后写入互不影响。如果需要同步,应改用localStorage加storage事件或BroadcastChannel实现。

刷新与关闭后重新打开对sessionStorage有何不同?

刷新是同一页面会话延续,数据保留;关闭标签页后再打开属于全新会话,sessionStorage会重新创建并置空。这正是它与localStorage在生命周期上的关键差异。

如何判断当前标签页的sessionStorage是否被复制?

可检查window.opener是否非空且同源,若存在则初始值可能来自来源页面,但无法追溯完整历史。更可靠的方式是在页面启动时写入一个唯一会话标识,后续通过标识有效性判断是否新会话。

从一道题,走向一组知识

把知识连起来

存储与离线数据

Cookie 的 HttpOnly、Secure 和 SameSite 属性各自解决什么问题?

同属「存储与离线数据」专题,接着看 Cookie HttpOnly Secure SameSite 属性作用 在具体场景中的处理方式。

存储与离线数据

IndexedDB 事务的原子性如何保证?

同属「存储与离线数据」专题,接着看 IndexedDB 事务原子性保证 在具体场景中的处理方式。

参考资料

  • Window: sessionStorage property

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 存储分区与会话续存规则
  3. 表单草稿:刷新恢复与关闭即删
  4. 生命周期边界与隐蔽例外
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑