sessionStorage 的数据在页面关闭后是否保留,取决于标签页是否被终止:只要标签页未关闭(包括刷新、导航、崩溃恢复),数据均保留;仅当标签页被显式关闭或浏览器进程退出时才清除。

sessionStorage 的数据在页面关闭后是否保留,取决于“关闭”的具体方式和浏览器行为,不是简单地“关了就没了”,而是严格绑定当前标签页的会话生命周期。
sessionStorage 的“会话”到底指什么
它不按时间计,也不依赖服务器 session,而是由浏览器进程中的单个标签页(或窗口)实例决定。只要这个标签页还在运行,哪怕你刷新几十次、用 history API 跳转、甚至浏览器崩溃后恢复该页,数据都完好无损。
- 页面刷新(F5 / location.reload)→ 数据保留
- 前进/后退导航 → 数据保留
- 点击地址栏回车或输入新 URL 跳转 → 数据保留(仍是同一标签页)
- 右键“在新标签页中打开” → 新标签页有全新、隔离的 sessionStorage,旧页数据不可见
哪些操作会真正清空 sessionStorage
只有明确终止当前标签页生命周期的动作才会触发清除:
- 点击标签页右上角 ×
- 快捷键 Ctrl+W(Windows)或 Cmd+W(macOS)
- 拖出标签页形成独立窗口后关闭该窗口
- 调用 window.close()(仅对 script 打开的窗口有效)
- 浏览器进程彻底退出(如所有同源标签页都已关闭,Chrome/Edge 在最后一个标签页关闭时清空;Firefox 则在进程退出时统一清空)
注意:如果启用了 Chrome 的「继续运行后台页面」(比如有音频播放、通知权限),浏览器进程可能不退出,导致 sessionStorage 意外残留数小时——这不是 bug,是设计使然。
跨标签页与隐私模式下的表现
sessionStorage 天然隔离,不同标签页之间完全不共享,哪怕 URL 完全相同:
- 新开一个相同 URL 的标签页 → 创建全新 sessionStorage 实例
- 隐私模式(无痕)下打开 → 即使和普通模式访问同一站点,也是独立会话,互不可见
- iframe 中使用 → 父页面与同源 iframe 各自拥有独立 sessionStorage,不自动同步
容易误用的典型场景
把它当“轻量 localStorage”来用,常导致逻辑断裂:
- 存登录态 token → 用户右键新标签页打开,新页读不到 token,直接跳登录页
- 存表单草稿 → 用户复制链接发给别人,对方打开后是空白草稿(因为新会话)
- 存用户偏好 → 页面刷新正常,但用户习惯 Ctrl+T 新建标签页操作,偏好丢失
- 没做 JSON 解析容错 → sessionStorage.getItem() 返回 null 或损坏字符串,直接 JSON.parse 报错导致白屏
真正适合它的场景是:单标签页内短期上下文,比如多步流程中间状态、未提交的编辑内容、临时筛选条件——这些本就不该跨页延续。


















