localstorage不支持自动过期,需手动实现:存时封装value与expires时间戳并json序列化;取时解析校验并惰性清理;可选定期扫描分批清理滞留项;需处理json解析异常、跨标签页独立判断及xss安全风险。

LocalStorage 本身不支持自动过期,清理过期项必须靠手动机制实现。核心思路是:存的时候记下到期时间,取的时候判断并清理;必要时再辅以定期扫描。
存数据时带上过期时间戳
每次 set 操作不要直接存原始值,而是封装成一个对象,包含 value 和 expires 字段:
- expires 推荐用 Date.now() + 过期毫秒数(比如 10 分钟后:Date.now() + 10 * 60 * 1000)
- 整个对象用 JSON.stringify 序列化后存入 localStorage
- 避免覆盖原生 key,确保每个带 TTL 的项都自带元信息
读数据时自动校验并惰性清理
get 操作不是简单取值,而是一套检查流程:
- 先 getItem,再 try-catch 解析 JSON(防止手动篡改导致 parse 失败)
- 解析成功后,对比 item.expires 与当前 Date.now()
- 若已过期,立即调用 removeItem(key),然后返回 null
- 这个方式轻量、无额外开销,但未被访问的过期项会滞留
定期扫描清理(可选,解决滞留问题)
适合对存储整洁度要求较高的场景,比如登录态、配置类缓存:
- 用 setInterval 每几小时或每天执行一次扫描
- 遍历 Object.keys(localStorage),逐个解析、比对 expires
- 为防阻塞主线程,建议单次最多清理 5–10 条,分批进行
- 注意跳过非 JSON 格式项(比如手动写入的纯字符串),用 try-catch 包裹解析逻辑
异常与边界情况处理
实际落地时几个关键细节不能漏:
- JSON.parse 必须加 try-catch,否则 localStorage 被篡改会导致脚本中断
- 跨标签页之间不共享过期状态,每个页面各自读取时独立判断——这是正常行为,无需同步
- 不适用于敏感数据,localStorage 易受 XSS 攻击,且无加密能力
- 大体积或高频写入需谨慎,localStorage 是同步 API,可能卡主线程
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











