sessionStorage的独特性在于严格绑定单个浏览器标签页生命周期:标签页关闭即清空数据,刷新或跳转同源页面仍保留;它与服务器session、登录态无关,仅由标签页实例决定,且与localStorage完全隔离。

sessionStorage 的独特性,核心就落在“会话”二字上——它不按时间计,也不按页面跳转算,而是严格绑定在**单个浏览器标签页(tab)的生命周期内**。只要这个标签页没关闭,哪怕刷新、前进后退、甚至跳转到同源的其他页面,数据都完好无损;一旦标签页被关闭(包括意外崩溃),里面所有 sessionStorage 数据立刻清空,不可恢复。
什么是“会话”?不是登录态,也不是窗口
这里的“会话”是浏览器原生定义的,和服务器端的 session、用户登录状态完全无关。它只认一个事实:你是否还在用**同一个标签页实例**。
- 新开一个标签页访问同一网址 → 是全新会话,sessionStorage 空的
- 右键“在新标签页中打开链接” → 新会话,与原标签页互不共享
- Ctrl+T 或 Cmd+T 手动新建标签页 → 同样是独立会话
- 通过 window.open() 打开同源页面 → 默认是新会话;但若指定 features 中包含 noopener 或未设 opener,则仍隔离;只有显式保留 opener 关系(且同源)时,子页才可能继承父页的 sessionStorage(实际极少支持,不应依赖)
怎么验证它真的“随标签页销毁”?
最直接的方法是用浏览器开发者工具实时观察:
- 打开 DevTools → 切换到「应用程序」(Application)选项卡
- 左侧「存储」区域展开「会话存储」(Session Storage)
- 选中当前域名,右侧显示所有键值对
- 此时关闭该标签页 → 再打开新标签页访问同地址 → 回到 Application 面板,会发现列表为空
注意:不是关掉整个浏览器,只是关掉某一个 tab —— 这就是它的销毁边界。
使用 Playwright 为 jimeng.jianying.com 管理浏览器会话,导入 cookies/localStorage 以自动化视频生成工作流,支持图片上传等功能
和 localStorage 最容易混淆的点
两者 API 完全一致(setItem/getItem/removeItem/clear),但行为逻辑根本不同:
- localStorage:数据写入即持久化,除非手动 clear 或用户清除站点数据,否则一直存在,跨标签页、跨重启都有效
- sessionStorage:只活在“这一片内存空间里”,仅限当前 tab,关掉就释放,不写磁盘,不跨进程
- 哪怕两个 tab 访问完全相同的 URL(比如 https://example.com/),它们的 sessionStorage 也是彼此隔离、互不可见的
哪些场景真正需要 sessionStorage?
适合存放“这次操作过程中临时有用、离开就不需要”的数据:
- 多步骤表单中间状态(如注册流程第2步填的信息,用户刷新后不丢失)
- 页面内临时筛选条件或折叠展开状态(比如商品列表的排序方式、分类收起项)
- 从列表页跳详情页时传递少量上下文(避免 URL 携带过长参数),前提是用户不会新开 tab 查看详情
- 防止重复提交的临时标记(如按钮点击后存个 flag,提交成功再删)
不适合存用户偏好、登录令牌、长期缓存数据——那些该交给 localStorage 或更安全的 HttpOnly Cookie。










