LocalStorage不支持自动过期,需手动实现:存入时封装值与时间戳(Date.now()+ttlMs),读取时解析并校验expire字段,过期则删除并返回null,可封装为set/get方法统一处理。

LocalStorage 本身不支持自动过期机制,但可以通过在存储数据时附带时间戳,在读取时校验是否过期,来手动实现“带过期时间的本地存储”。
存储时记录过期时间
写入数据前,把原始值和过期时间(如毫秒时间戳)一起打包成对象存入 LocalStorage。推荐使用 Date.now() + 过期毫秒数 作为 expire 字段。
- 例如:5 分钟后过期 →
expire: Date.now() + 5 * 60 * 1000 - 避免用相对字符串(如 "2025-04-01T12:00:00"),防止时区或解析错误
- 用
JSON.stringify()存储,确保结构可还原
读取时主动校验并清理
每次调用 getItem 时,先解析内容,检查 expire 是否存在且大于当前时间。不满足则立即删除并返回 null。
- 不要依赖“读取即失效”,必须每次读都判断,否则可能拿到已过期数据
- 校验失败时建议调用
removeItem,避免残留无效数据 - 可封装为统一的
getWithExpiry(key)方法,复用逻辑
可选:写入前自动清理过期项(轻量兜底)
如果应用对存储干净度要求高,可在设置新值前遍历所有 key,清除已过期项。注意仅在必要时做(如启动、登录后),避免频繁遍历影响性能。
立即学习“Java免费学习笔记(深入)”;
- 用
localStorage.length和localStorage.key(i)遍历 - 只解析 value 中含
expire字段的对象,跳过纯字符串等非规范数据 - 不建议在每次 set 时都遍历,尤其 key 数量多时
封装一个简单工具类示例
以下是一个轻量实用的实现思路(无依赖):
const Storage = {
set(key, value, ttlMs) {
if (ttlMs == null) {
localStorage.setItem(key, JSON.stringify({ value }));
return;
}
const item = {
value,
expire: Date.now() + ttlMs
};
localStorage.setItem(key, JSON.stringify(item));
},
<p>get(key) {
const raw = localStorage.getItem(key);
if (!raw) return null;</p><pre class='brush:php;toolbar:false;'>try {
const item = JSON.parse(raw);
if (item.expire && item.expire <= Date.now()) {
localStorage.removeItem(key);
return null;
}
return item.value;
} catch {
return null;
}} };
// 使用:Storage.set('token', 'abc123', 30 60 1000); // 30分钟 // const token = Storage.get('token'); // 自动校验过期


















