JavaScript本地存储无“最好”方案,只有最合适:localStorage持久同源共享,sessionStorage仅限当前标签页;IndexedDB适合大量结构化数据且支持二进制;cookie因带宽消耗、安全风险等不推荐作通用存储。

JavaScript 本地存储没有“最好”的方案,只有“最合适”的——取决于你存的是什么、要存多久、是否需要跨标签页同步、有没有敏感信息。
localStorage 和 sessionStorage 的核心区别在哪
两者都是同步 API,键值对只能存字符串,但生命周期和作用域完全不同:
-
localStorage:持久保存,除非手动调用localStorage.removeItem()或清空浏览器数据,否则一直存在;同源下所有标签页共享 -
sessionStorage:仅当前标签页(及由它打开的子窗口)有效,关闭标签页即清空;即使同源,新开标签页也是独立的 - 都受同源策略限制,
http://a.com和https://a.com视为不同源,无法互相读取 - 写入非字符串值(如对象)会自动调用
.toString(),结果通常是[object Object],所以务必配合JSON.stringify()和JSON.parse()
IndexedDB 适合存什么类型的数据
当你需要存结构化数据、大量内容(>5MB)、支持索引查询或事务操作时,IndexedDB 是唯一可行的原生方案:
- 支持存储二进制(
Blob、ArrayBuffer)、对象、数组,不强制转字符串 - 异步 API,不会阻塞主线程;但学习成本高,需处理
open、transaction、objectStore等概念 - 配额比
localStorage高得多(通常占磁盘空间的 50%,具体由浏览器决定),但首次写入可能触发用户授权提示(尤其在 Safari 中) - 注意:不能直接用
await,必须封装 Promise,或使用idb这类轻量封装库(如idb.openDB())
cookie 不是本地存储的推荐选择
虽然技术上能存,但 document.cookie 已不适合作为通用本地存储手段:
家政服务平台系统包含家用电器安装清洗、搬家、家电维修、管道疏通、月嫂保姆、育儿陪护、上门开锁等多种服务项目,用户可以直接通过家政小程序咨询,在线预约服务类型,同时还设置有知识科普,给用户科普一些清洁保养小技巧,让用户能够足不出户就可以直接预约服务,方便又快捷。本项目使用微信小程序平台进行开发。使用腾讯专门的小程序云开发技术,云资源包含云函数,数据库,带宽,存储空间,定时器等,资源配额价格低廉,无需
立即学习“Java免费学习笔记(深入)”;
- 每次 HTTP 请求都会自动带上(除非设
HttpOnly),浪费带宽;最大仅约 4KB,且包含键名、过期时间等开销后实际可用更少 - 默认随请求发送,有 CSRF 风险;若存敏感信息,必须设
Secure+HttpOnly,但这又导致 JS 无法读写 - 有效期逻辑复杂:不设
Expires或Max-Age就是会话级,但关闭浏览器是否清除还取决于浏览器设置(Chrome 会保留,Firefox 可能不) - 现代前端应用中,
cookie应只用于身份凭证(如sessionid),其他状态优先走localStorage或IndexedDB
真正容易被忽略的是兼容性细节:Safari 在无痕模式下会禁用 localStorage 并抛出异常,而不是静默失败;IndexedDB 在旧版 iOS Safari 中有严重 bug(如无法删除数据库);而所有方案在第三方上下文(iframe)中都可能被浏览器拦截。上线前务必在目标环境中实测写入与读取。










