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制作彩色进度条样式的代码示例分享
Jun 23 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
Jan 17 HTML / CSS
CSS3 实现雷达扫描图的示例代码
Sep 21 HTML / CSS
CSS3 transition 实现通知消息轮播条
Oct 14 HTML / CSS
10种CSS3实现的loading动画,挑一个走吧?
Nov 16 HTML / CSS
canvas基础之图形验证码的示例
Jan 02 HTML / CSS
HTML5拖拽的简单实例
May 30 HTML / CSS
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
Mar 15 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
Mar 21 HTML / CSS
canvas实现漂亮的下雨效果的示例
Apr 18 HTML / CSS
CSS实现两列布局的N种方法
Aug 02 HTML / CSS
使用CSS连接数据库的方式
Feb 28 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
dedecms系统常用术语汇总
2007/04/03 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
PHP实现的日历功能示例
2018/09/01 PHP
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Django 查询数据库并返回页面的例子
2019/08/12 Python
Python如何实现的二分查找算法
2020/05/27 Python
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
英语专业学生个人求职信
2014/01/28 职场文书
美术教师岗位职责
2014/03/18 职场文书
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
图书馆标语
2014/06/19 职场文书
房产协议书范本2014
2014/09/30 职场文书
九华山导游词
2015/02/03 职场文书
求职推荐信范文
2015/03/27 职场文书
记者节感言
2015/08/03 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
Python基础之函数嵌套知识总结
2021/05/23 Python
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers
Nginx HTTP跳转至HTTPS
2022/05/15 Servers