sessionStorage 的生命周期绑定标签页开关而非时间,页面刷新、路由跳转等均保留数据,仅关闭标签页或浏览器进程时清空;不支持跨标签页共享,存取需序列化,容量约5MB且仅限字符串。

sessionStorage 的数据存取时机和生命周期不是靠“时间”驱动,而是由浏览器标签页的打开与关闭动作严格绑定。它不计时、不自动过期,只响应用户对标签页的操作。
什么时候能存、什么时候能取?
只要当前标签页处于打开状态,任何时候都可以调用 setItem() 存,getItem() 取。页面刷新、路由跳转、前进后退、甚至浏览器崩溃后恢复该标签页,数据都完整保留。
- 存数据:页面加载后任意时刻(比如表单输入中途、向导步骤切换时)
- 取数据:只要没关闭标签页,哪怕跳转到其他网站再按返回键回来,依然可读
- 注意:新开一个同域名标签页,它的 sessionStorage 是空的,和原标签页完全隔离
什么操作会清空数据?
只有明确结束当前标签页会话的行为才会触发清除——不是“超时”,而是“终结”。以下任一操作都会让整个 sessionStorage 归零:
- 点击标签页右上角 ×
- 使用快捷键 Ctrl+W(Windows)或 Cmd+W(Mac)
- 鼠标右键 → “关闭标签页”
- 把标签页拖出窗口变成独立窗口,再关闭该窗口
- 浏览器进程被强制结束(如 kill 进程、系统断电)
如何避免误用导致体验断裂?
sessionStorage 天然不适合做跨页面状态同步或登录态延续。常见踩坑点和应对方式:
- 不要用它存 access_token 并指望用户多开标签页还能保持登录——每个标签页都要重新鉴权
- 分步表单场景下,可在 beforeunload 事件中主动 removeItem 清理无效草稿,防止残留脏数据
- 需要跨标签页共享的状态(如用户主题偏好),应改用 localStorage + storage 事件监听
- 存对象必须 JSON.stringify(),取出来要 JSON.parse(),否则会得到字符串而非原始结构
容量与类型限制要提前兜底
约 5MB 容量看似宽松,但实际受限于浏览器实现;且只支持字符串。大体积或复杂结构需谨慎处理:
- XML、JSON、表单序列化结果等,先检查长度再 setItem,避免超出报错
- 建议在写入前加 try-catch,并 fallback 到控制台提示或降级策略(如仅存关键字段)
- 敏感信息(如临时 token)虽不随请求发送,仍不建议明文存 sessionStorage,尤其在公共设备上


















