localStorage设置过期时间

复制代码
export const storage = {
    /*
    * set 存储方法
    * @ param {String}     key 键
    * @ param {String}     value 值,
    * @ param {String}     expired 过期时间,以分钟为单位,非必须
    */
    set(key, val, expired) {
        if (typeof val !== 'string') {
            val = JSON.stringify(val);
        }
        window.localStorage.setItem(key, val);
        if (expired) {
            window.localStorage.setItem(`${key}__expires__`, `${Date.now() + 1000 * 60 * expired}`);
        }
    },
    /*
   * get 获取方法
   * @ param {String}     key 键
   * @ param {String}     expired 存储时为非必须字段,所以有可能取不到,默认为 Date.now+1
   */
    get(key) {
        const expired = window.localStorage.getItem(`${key}__expires__`) || Date.now + 1;
        const now = Date.now();

        if (now >= expired) {
            window.localStorage.removeItem(key);
            return;
        }
        let val = window.localStorage.getItem(key);
        try {
            val = JSON.parse(val);
        } catch (e) {
            console.log(`${val} Unexpected token H in JSON at position 0`);
        }
        return val;
    },
    clear() {
        window.localStorage.clear();
    },
    /*
    * remove 移除
    * */
    remove(key) {
        if (window.localStorage.getItem(`${key}__expires__`)) {
            window.localStorage.removeItem(`${key}__expires__`);
        }

        if (window.localStorage.getItem(key)) {
            window.localStorage.removeItem(key);
        }
    }
};
复制代码

在调用get方法时会进行时间范围校验:

复制代码
      let arr = [
        {
          id: 0,
          name: "小明",
        },
        {
          id: 1,
          name: "小华",
        },
      ];
      storage.set("list", arr, 0.1);
      let result = storage.get("list");
      console.log(result);
复制代码

 

posted @   吴小明-  阅读(761)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
历史上的今天:
2020-05-10 js-对象的所有方法
点击右上角即可分享
微信分享提示