核心差异在于数据生命周期、作用域和适用场景:localstorage永久存储且同源所有标签页共享,适合长期状态;sessionstorage仅限当前标签页会话,关闭即销毁,适用于临时上下文数据。

sessionStorage 和 localStorage 的存取行为差异,核心不在语法或操作方式,而在于数据何时生效、在哪能读到、以及什么时候消失。它们用同一套 API(setItem、getItem、removeItem、clear),但背后的行为逻辑完全不同。
数据存活时间不同
localStorage 中的数据没有自动过期机制,只要没被代码删除或用户手动清除(比如清缓存、隐私模式下),就会一直存在,哪怕关机重启、浏览器重开也还在。
sessionStorage 的数据绑定在“页面会话”上:只要标签页没关闭,哪怕刷新、跳转、前进后退,数据都保留;一旦该标签页关闭(包括意外崩溃),数据立刻清空,不可恢复。
作用域范围不同
localStorage 在同源(协议+域名+端口)的所有标签页、窗口间共享。A 标签页写入 localStorage.setItem('theme', 'dark'),B 标签页立即能通过 localStorage.getItem('theme') 读到。
sessionStorage 完全按标签页隔离。即使两个标签页打开的是同一个 URL,它们的 sessionStorage 互不干扰——A 写的,B 读不到;新开的标签页或 iframe(同源)也各自拥有独立副本。
适用场景导向不同
localStorage 适合保存跨会话的用户级状态,比如主题偏好、语言选择、长期登录态标记、历史浏览记录等。
sessionStorage 更适合单次交互流程中的上下文数据,比如多步骤表单的中间输入、临时 token、页面内导航参数、未提交的草稿内容——这些数据只服务于当前这个标签页的一次打开过程。
存取细节注意事项
两者都只能存储字符串,存对象或数组必须先 JSON.stringify(),读取时需 JSON.parse() 并加 try/catch 防止解析失败导致报错中断。
- 读取不存在的键,两者都返回
null,不是undefined - 调用
.clear()会清空当前作用域下的全部键值对,不会影响其他标签页(sessionStorage)或其他同源页(localStorage) - 同源限制严格:http://a.com 和 https://a.com 视为不同源,无法共享;localhost:3000 和 localhost:8080 也不互通











