sessionstorage数据仅在标签页销毁时清除,刷新(f5/reload/回车/history.pushstate)均保留;关闭标签页后立即清空,但各浏览器清空时机不同:chrome/edge为最后同源标签页关闭时,firefox为进程退出时,safari为同源标签页关闭即清。

sessionStorage 的行为不取决于“页面是否重载”,而取决于“标签页是否被销毁”。它不是按页面加载次数计,而是按浏览器标签页实例的生命周期来管理数据。
页面重载(刷新)时数据始终保留
无论用 F5、location.reload()、地址栏回车,还是同域内 history.pushState 跳转,sessionStorage 都不会清空。因为这些操作只是重建 DOM 和 JS 上下文,标签页实例仍在运行,会话未终止。
- 刷新后可直接用 sessionStorage.getItem() 读取原有数据
- 注意:getItem 返回 null(不是 undefined),判断时应写 !== null
- 框架(如 Vue/React)不会自动响应 sessionStorage 变化,需手动读取并赋值到响应式状态
标签页关闭时数据才真正清除
sessionStorage 在当前标签页完全释放资源后才被销毁,但具体时机因浏览器而异:
批量分析录音转写,输出多维度拓客报告。触发词:录音分析、总结、音频总结、拜访记录总结。当用户提及「分析录音」「看看录音数据」「最近的录音」「通话记录」且意图为批量统计/分析时触发。仅出现「录音」或「拜访」时需结合上下文,若仅查看单条详情则不触发。
- Chrome / Edge:仅当该源(origin)下最后一个同源标签页关闭时才清空;关掉其中一个,其他同源页的数据仍存在
- Firefox:整个浏览器进程退出时统一清空(哪怕只关一个窗口,其他窗口开着也可能被清)
- Safari(含 iOS):同源标签页关闭即清空;无痕模式默认禁用 sessionStorage,访问会直接抛 SecurityError
- 在 beforeunload 或 pagehide 事件中仍可安全读写;unload 后不可再访问
新标签页或 iframe 不继承原 sessionStorage
sessionStorage 是严格按标签页隔离的,不是按域名或 URL 共享:
- 右键“在新标签页中打开”或 window.open() 打开的页面,初始时是空的 sessionStorage(不是复制)
- 同域名下,Tab A 存了 step: '2',Tab B 访问同一地址,getItem('step') 仍返回 null
- iframe 即使与父页同源,其 window.sessionStorage 也是独立实例,彼此完全不互通
为什么有时关掉再开,数据“好像还在”?
这不是 sessionStorage 失效,而是浏览器机制造成的假象:
- Chrome/Edge 默认保持后台页面活跃(如有音频、通知、Service Worker),导致进程未退出,sessionStorage 实际未被销毁
- 启用“恢复上次会话”重启浏览器,部分版本会尝试还原标签页及原 sessionStorage(非标准行为,不可依赖)
- 误把数据存到了 localStorage——它本就不随关闭消失,验证前请确认实际使用的存储 API










