页面刷新时sessionstorage数据还在。刷新(f5、location.reload()、同域history跳转)不会清除sessionstorage,数据仅在当前标签页关闭后才被销毁。

页面刷新时 sessionStorage 数据还在吗
在页面刷新(F5、location.reload()、地址栏回车、同域内 history.pushState 跳转)后,sessionStorage 中的数据**完全保留**,不会丢失。
这是因为刷新只是重新加载当前标签页的 DOM 和 JS 上下文,而 sessionStorage 的生命周期绑定的是「标签页会话」,不是「页面实例」。只要标签页没关,数据就稳稳在内存里。
- 常见误判:看到刷新后表单恢复了,就以为是框架或缓存做的——大概率是你自己写了
sessionStorage.getItem()恢复逻辑 - 注意
getItem()返回null(不是undefined),读取前建议加空值判断:if (sessionStorage.getItem('form_name') !== null) - 如果用了 Vue/React,组件初始化时没手动读取,那即使数据存在,UI 也不会自动更新
关闭标签页或浏览器时数据何时消失
sessionStorage 在「当前标签页被彻底关闭」时清空,但这个“关闭”的判定因浏览器而异:
- Chrome / Edge:最后一个同源标签页关闭时才清空;关掉其中一个标签页,其他同源页的
sessionStorage不受影响 - Firefox:整个浏览器进程退出时清空(哪怕只关一个窗口,其他窗口还开着,也可能清)
- Safari(含 iOS):同源标签页关闭即清,但无痕模式下默认禁用
sessionStorage,直接抛SecurityError
特别注意:sessionStorage 不会在「用户点击浏览器右上角 ×」那一刻立刻销毁——它等的是标签页资源释放完成,所以你在 beforeunload 或 pagehide 里还能安全读写;但别指望在 unload 之后还能取到值。
为什么有时关了又开,数据好像还在
这不是 sessionStorage 失效,而是浏览器做了「会话恢复」:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- Chrome 默认开启「继续运行后台页面」(比如有通知、音频播放),导致浏览器进程未退出,
sessionStorage实际没被清 - 用户用「恢复上次会话」重启浏览器,部分版本会尝试还原标签页并附带原
sessionStorage(非标准行为,不可依赖) - 你误把数据存到了
localStorage,它本来就不会随关闭消失
验证方法很简单:关掉所有同源标签页 → 任务管理器里确认浏览器进程已退出 → 重新打开浏览器访问页面 → 检查 sessionStorage.getItem('key') 是否为 null。
iframe 中的 sessionStorage 是隔离的
即使父子页面同源,iframe 内的 sessionStorage 和父页面也**完全不互通**,调用 window.sessionStorage 拿到的是各自独立的实例。
这和 localStorage 一样,是浏览器的安全隔离机制,不是 bug。
- 常见踩坑:在父页设置
sessionStorage.setItem('auth', 'token'),期望子iframe能读取——结果读出来是null - 解决思路:通过
postMessage传必要状态,或改用 URL 参数、document.cookie(注意 HttpOnly 限制) - 不要试图用
iframe.contentWindow.sessionStorage访问——跨域会报错,同域也因作用域隔离拿不到
真正容易被忽略的,是开发时本地测试往往只开一个标签页,关了再开看起来像“每次都清空”,但上线后用户多标签并行操作,sessionStorage 的隔离性和会话边界就会暴露得非常真实。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










