HOW - localstorage 超时管理方案

文章目录

localStorage 本身 不支持过期时间(超时设置) ,因为它设计上是永久存储 (除非用户手动清除或调用 removeItem())。

不过,我们可以通过在存储时附带时间戳的方式,自行实现"超时机制"。


实现思路

当你调用 localStorage.setItem() 时,不直接存原始值,而是存一个带有时间戳的对象,例如:

js 复制代码
{
  value: "存储的数据",
  expire: 过期时间戳(单位:毫秒)
}

然后在读取时判断是否过期,如果过期则自动清除并返回 null


示例代码

封装工具函数

js 复制代码
/**
 * 设置带过期时间的 localStorage
 * @param {string} key 键名
 * @param {any} value 值
 * @param {number} expire 过期时间(毫秒)
 */
function setLocalStorage(key, value, expire) {
  const data = {
    value,
    expire: Date.now() + expire, // 当前时间 + 有效期
  };
  localStorage.setItem(key, JSON.stringify(data));
}

/**
 * 获取带过期判断的 localStorage
 * @param {string} key 键名
 * @returns {any | null} 值(若过期或不存在则返回 null)
 */
function getLocalStorage(key) {
  const raw = localStorage.getItem(key);
  if (!raw) return null;

  try {
    const data = JSON.parse(raw);
    if (data.expire && Date.now() > data.expire) {
      localStorage.removeItem(key); // 已过期,删除
      return null;
    }
    return data.value;
  } catch {
    return null;
  }
}

/**
 * 删除 localStorage
 */
function removeLocalStorage(key) {
  localStorage.removeItem(key);
}

使用示例

js 复制代码
// 存储 10 分钟有效的数据
setLocalStorage("userInfo", { name: "Tom" }, 10 * 60 * 1000);

// 读取数据
const user = getLocalStorage("userInfo");
if (user) {
  console.log("还没过期:", user);
} else {
  console.log("数据已过期或不存在");
}

补充建议

场景 建议
页面刷新频繁但不希望长期保存数据 sessionStorage
想要真正的过期机制(浏览器自动清理) 考虑 IndexedDB + 定时任务 或 后端 token 管控
想统一管理缓存 可以封装一个缓存工具类或用第三方库(如 store.js
相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万2 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
A黄俊辉A2 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
三十而立洋2 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁2 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄2 天前
JavaScript 隐式全局变量解析
javascript
honkun62 天前
vue 表格组件 vxe-table 配置 ajax 请求自动加载数据与表单查询
vue.js·vxe-table
kybs19912 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net