LocalStorage 本身不支持过期时间,但可通过封装带时间戳的数据结构与读取时校验实现:存入时记录 expiresAt 时间戳,读取时判断过期并自动清理,支持自定义毫秒或字符串时效、异常防护及按需批量清理。

LocalStorage 本身不支持设置过期时间,但可以通过封装「带时间戳的数据结构」+「读取时校验」来实现统一的过期管理。核心思路是:存的时候附带过期时间(如毫秒时间戳),取的时候先判断是否过期,过期则自动清除并返回 null。
1. 封装 setItem 支持自定义过期时长(单位:毫秒)
把原始值和过期时间一起序列化为对象存储,避免污染原始数据结构。
- 传入 key、value、expires(可选,单位毫秒,默认永不过期)
- 计算过期时间戳:
Date.now() + expires - 用
JSON.stringify存入 { value, expiresAt } 对象
2. 封装 getItem 自动校验并清理过期项
读取时先解析,检查 expiresAt 是否小于当前时间,过期就调用 removeItem 并返回 null。
- 避免重复读取过期数据,提升一致性
- 不主动清理所有过期项(避免遍历开销),只清理本次访问的项
- 返回值与原生一致(null 或解码后的 value)
3. 提供 clearExpired 方法批量清理(按需调用)
适用于启动时或低频维护场景,遍历所有 key 判断是否过期。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 用
Object.keys(localStorage)获取全部键 - 逐个解析,过期则
localStorage.removeItem(key) - 注意:频繁调用会影响性能,建议仅在初始化或用户登出后执行
4. 可选增强:支持相对时间字符串(如 "1h", "7d")
提升易用性,内部转换为毫秒再计算时间戳。
- 例如:
"1h"→60 * 60 * 1000,"7d"→7 * 24 * 60 * 60 * 1000 - 正则或简单映射表解析,避免引入复杂依赖
- 保持向后兼容:数字仍表示毫秒,字符串走解析逻辑
不复杂但容易忽略的是:务必对 JSON 解析加 try-catch,防止手动篡改 localStorage 导致解析失败;另外,跨标签页时过期判断是独立的,无需额外同步——因为每个页面读取时都会各自校验。

















