sessionstorage数据在标签页会话结束时被清除,具体时机因浏览器而异:chrome/edge在最后一个同源标签页关闭时清空,firefox在浏览器进程退出时清空,safari在同源标签页关闭时即清空;刷新、同源跳转、崩溃恢复均不触发清除。

sessionStorage 的数据在页面关闭后会被清除,但“关闭”不是简单点 × 就算数——它的清除时机取决于浏览器如何判定「标签页会话结束」,不同浏览器行为有差异,且受多标签页、后台进程等影响。
什么时候真正被清除?
sessionStorage 的生命周期绑定的是「单个标签页的会话」,不是整个浏览器。关键看标签页资源是否被完全释放:
- Chrome / Edge:等到最后一个同源标签页关闭时才清空。关掉其中一个,其他同源页的数据仍保留。
- Firefox:只要浏览器进程退出(比如所有窗口都关了,或任务管理器里进程消失),所有 sessionStorage 立即清空,不管还有几个标签页开着。
- Safari(含 iOS):同源标签页关闭即清空;但在无痕模式下默认禁用 sessionStorage,尝试使用会直接抛 SecurityError。
刷新、跳转、崩溃恢复都不影响数据
这些操作只是重新加载当前标签页上下文,sessionStorage 存储在内存中,标签页没关,数据就还在:
- F5 刷新、地址栏回车、
location.reload() - 同域内
history.pushState()或history.back() - 浏览器意外崩溃后自动恢复该标签页(只要没手动关闭过)
注意:Vue/React 组件不会自动读取 sessionStorage,得在初始化时手动调用 getItem() 并解析还原。
为什么有时关了再开,数据好像还在?
这不是 sessionStorage 失效,而是浏览器做了「会话恢复」或后台保活:
- Chrome 启用了「继续运行后台页面」(如页面有通知、音频播放),导致浏览器进程未退出,sessionStorage 实际未被释放
- 用户用「恢复上次会话」重启浏览器,部分版本会尝试还原标签页及原 sessionStorage(非标准行为,不可依赖)
- 误把数据存在了 localStorage —— 它本来就不会随关闭消失,要检查清楚存的是哪个 API
iframe 和多标签页的隔离性
sessionStorage 天然不共享,这是设计原则:
- 父子页面即使同源,iframe 内的 sessionStorage 与父页完全独立,互不可见
- 新开一个相同 URL 的标签页,会生成全新的 sessionStorage 实例,和原页毫无关系
- 同一域名下不同路径(如
/login和/dashboard)可在同一个标签页内共用 sessionStorage











