sessionstorage数据在关闭标签页时立即同步销毁且不可恢复;页面刷新、同源路由跳转、window.open开新窗口等操作均不触发清空,其生命周期严格绑定单个浏览上下文。

sessionStorage 的数据只属于当前标签页,关掉这个标签页,数据就立刻没了——不是延迟清空,也不是等浏览器退出才处理,而是标签页关闭动作一触发,浏览器就同步销毁对应的所有键值对。
它不看时间,只看“标签页是否还开着”
只要标签页没关,哪怕你刷新一百次、来回切换路由、甚至页面崩溃后恢复(比如 Chrome 崩溃重启并自动还原该标签页),里面存的数据全都在。但只要你点 ×、按 Ctrl+W、右键关闭、或者把标签页拖出窗口变成独立窗口再关掉,sessionStorage 就被清得一干二净,且无法恢复。
哪些操作不会清空它?
- 页面刷新(F5 或
location.reload()) - 同源下使用
history.pushState()切换 URL(如 Vue/React 单页应用的路由跳转) - 在当前页调用
window.open()打开新窗口(新窗口有自己独立的 sessionStorage,不影响原页)
哪些操作会清空它?
- 用户手动关闭该标签页(包括右键菜单关闭、拖出后关闭)
- 脚本调用
window.close()(仅限 JavaScript 打开的窗口) - 浏览器进程结束(Firefox 更敏感;Chrome/Edge 通常等到最后一个同源标签页关闭才清)
- 隐私模式下新开标签页:哪怕 URL 完全一样,也是全新隔离的 sessionStorage 实例
注意几个实际易错点
- iframe 中的 sessionStorage 和父页面完全隔离,即使同源也无法互通
- 复制链接在新标签页打开 → 新页是空的 sessionStorage,旧页数据不会迁移
- 服务端重定向(302)本质是一次新导航,原 sessionStorage 不延续
- Vue/React 组件不会自动从 sessionStorage 恢复状态,需手动在初始化时读取并解析
sessionStorage 的设计目标很明确:为单次浏览上下文提供轻量、隔离、自动托管的临时存储。它不是“短效 localStorage”,而是一个严格绑定标签页生命周期的会话白板。











