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个字段
因为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)
本质上我们的思路并非是要定时去清理过期的项,而是在获取的时候判断是否过期,如果过期再去清除该项。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
这篇文章算是我对在阿里做微前端的一个总结吧,没有写的事无巨细,更像是一个对...
TOP云 (west.cn)8月22日消息,四数字 域名 简短好记、 建站 没有限制,是很多...
6月28~29日,伴随着又一波“沪上花海”,由 TOP云 米哥拍卖和阿里云联合主办,“...
filter 属性定义了元素的可视效果 blur 给图像设置高斯模糊。radius一值设定高斯...
前言 最近越来越多的读者认可我的文章,还是件挺让人高兴的事情。有些读者私信我...
TOP云(zuntop.com)科技 6 月 3 日消息,据外媒 ZDNet 报道,谷歌宣布计划投资 ...
租一个 云服务器 要多少钱?租一个 云服务器 ,一年的话,一般要几百元到几千元...
Dreamweaver CS3设计网页的时候,图像域是网页中必不可少的成份。它能让浏览者展...
最近项目中要做一个领积分的效果,根据老板的描述,这个效果类似于支付宝蚂蚁森...
简介 gotalk 专注于进程间的通信,致力于简化通信协议和流程。同时它: 提供简洁...