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使用技巧5个
Apr 02 HTML / CSS
使用CSS3的appearance属性改变任何元素的浏览器默认风格
Dec 24 HTML / CSS
CSS3中的Transition过度与Animation动画属性使用要点
May 20 HTML / CSS
html5组织文档结构_动力节点Java学院整理
Jul 11 HTML / CSS
canvas烟花特效锦集
Jan 17 HTML / CSS
Canvas 文本转粒子效果的实现代码
Feb 14 HTML / CSS
html5实现canvas阴影效果示例
May 07 HTML / CSS
HTML5的新特性(1)
Mar 03 HTML / CSS
多视角3D逼真HTML5水波动画
Mar 03 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
Nov 14 HTML / CSS
深入浅析HTML5中的article和section的区别
May 15 HTML / CSS
使用Html5中的cavas画一面国旗
Sep 25 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手册及PHP编程标准
2006/12/17 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
Python中的集合类型知识讲解
2015/08/19 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
2014全国两会心得体会
2014/03/17 职场文书
经典团队口号大全
2014/06/21 职场文书
2015年招聘工作总结
2014/12/12 职场文书
会计人员岗位职责
2015/02/03 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
学校财务管理制度
2015/08/04 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python