localStorage 设置过期时间的方法实现


Posted in HTML / CSS onDecember 21, 2018

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)

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
详解纯CSS3制作的20种loading动效
Jul 05 HTML / CSS
纯CSS3实现表单验证效果(非常不错)
Jan 18 HTML / CSS
css3的图形3d翻转效果应用示例
Apr 08 HTML / CSS
CSS3实现时间轴效果
Jul 11 HTML / CSS
CSS3 实现弹幕的示例代码
Aug 07 HTML / CSS
CSS3关于z-index不生效问题的解决
Feb 19 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
Sep 14 HTML / CSS
HTML5开发动态音频图的实现
Jul 02 HTML / CSS
CSS实现单选折叠菜单功能
Nov 01 HTML / CSS
分享CSS盒子模型隐藏的几种方式
Feb 28 HTML / CSS
通过feDisplacementMap和feImage实现水波特效
Apr 24 HTML / CSS
CSS 左边固定宽右边自适应的6种方法
May 15 HTML / CSS
webapp字号大小跟随系统字号大小缩放的示例代码
Dec 26 #HTML / CSS
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
Jan 05 #HTML / CSS
HTML5实现表单自动验证功能实例代码
Jan 11 #HTML / CSS
HTML5 File接口在web页面上使用文件下载
Feb 27 #HTML / CSS
使用phonegap检测网络状态的方法
Mar 30 #HTML / CSS
HTML5文档结构标签
Apr 21 #HTML / CSS
HTML5的文档结构和新增标签完全解析
Apr 21 #HTML / CSS
You might like
php 静态页面中显示动态内容
2009/08/14 PHP
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
PHP开发负载均衡指南
2010/07/17 PHP
php操作xml
2013/10/27 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
JavaScript延迟加载
2021/03/09 Javascript
javascript引用对象的方法
2007/01/11 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
Python 比较两个数组的元素的异同方法
2017/08/17 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
降低python版本的操作方法
2020/09/11 Python
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
法学专业毕业生自荐信范文
2013/12/18 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
职务任命书范本
2014/06/05 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
个人委托书范本汇总
2014/10/01 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
法院执行局工作总结
2015/08/11 职场文书
工作建议书范文
2019/07/08 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS