localStorage 设置过期时间

localStorage除非人为手动清除,否则会一直存放在浏览器中,但是很多情况下我们可能需要localStorage有一个过期时间,比如我们将用户身份认证 token 保存在客户端,1周之内有效,超过一周则要重新登录,那么这种需求该怎么实现呢
要知道,localStorage本身并没有提供过期机制,既然如此,那就只能我们自己来实现了,我们可以直接给其原型上加上这样一个方法

Storage.prototype.setExpire=(key,value,expire) =>{

};
Storage.setExpire(key,value,expire);

要过期就必须要记录时间,我们的思路是,设置值得时候就将当前时间记录进去,然后获取值得时候判断一下当前时间和之前的时间差是否在某个范围之内,若果超出范围,则清空当前项,并返回null

要将时间加入到值中就必须要定义一个格式

Storage.prototype.setExpire=(key, value, expire) =>{
    let obj={
        data:value,
        time:Date.now(),
        expire:expire
    };
    localStorage.setItem(key,JSON.stringify(obj));
}

包括下面3个字段

data 实际的值
time 当前时间戳
expire 过期时间

因为localStorage 设置的值不能为对象, 所以这里使用了 JSON.stringify 方法将其转为字符串,最终在使用的时候得转回来。

接着我们添加一个获取的方法

Storage.prototype.getExpire= key =>{
    let val =localStorage.getItem(key);
    if(!val){
        return val;
    }
    val =JSON.parse(val);
    if(Date.now()-val.time>val.expire){
        localStorage.removeItem(key);
        return null;
    }
    return val.data;
}

我们可以先测试一下

localStorage.setExpire("token",'xxxxxx',5000);
window.setInterval(()=>{
    console.log(localStorage.getExpire("token"));
},1000)

本质上我们的思路并非是要定时去清理过期的项,而是在获取的时候判断是否过期,如果过期再去清除该项。

  • 18
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
localStorage 是 HTML5 提供的一种在客户端存储数据的方法,它可以将数据存储在浏览器中。localStorage 没有提供直接设置过期时间的 API,但是我们可以手动实现过期时间的功能。以下是一个简单的方法: 1. 存储数据时,除了存储数据本身,还存储一个过期时间(以时间戳的形式存储)。 2. 获取数据时,判断当前时间是否大于过期时间,如果是,则删除数据并返回 null,否则返回存储的数据。 3. 可以在每次页面加载时,检查 localStorage 中的所有数据是否过期,如果过期,则删除这些数据。 以下是一个示例代码: ```javascript function setLocalStorageWithExpiration(key, value, expirationInMinutes) { const expirationDate = new Date(new Date().getTime() + (expirationInMinutes * 60 * 1000)); const item = { value: value, expirationDate: expirationDate.getTime() }; localStorage.setItem(key, JSON.stringify(item)); } function getLocalStorageWithExpiration(key) { const itemStr = localStorage.getItem(key); if (!itemStr) { return null; } const item = JSON.parse(itemStr); const now = new Date(); if (now.getTime() > item.expirationDate) { localStorage.removeItem(key); return null; } return item.value; } // 每次页面加载时,检查 localStorage 中的所有数据是否过期 for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); getLocalStorageWithExpiration(key); } ``` 在上面的代码中,我们定义了两个函数:setLocalStorageWithExpiration 和 getLocalStorageWithExpiration。setLocalStorageWithExpiration 函数用于将数据存储到 localStorage 中,并设置过期时间;getLocalStorageWithExpiration 函数用于从 localStorage 中获取数据,并检查数据是否过期。最后,我们在页面加载时,遍历 localStorage 中的所有数据,并检查它们是否过期

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值