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弹性盒模型开发笔记(一)
Apr 26 HTML / CSS
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
Jun 15 HTML / CSS
CSS3常用的几种颜色渐变模式总结
Nov 18 HTML / CSS
CSS3 二级导航菜单的制作的示例
Apr 02 HTML / CSS
HTML5中的Scoped属性使用实例
Apr 23 HTML / CSS
HTML5 Video标签的属性、方法和事件汇总介绍
Apr 24 HTML / CSS
HTML5中的音频和视频媒体播放元素小结
Jan 29 HTML / CSS
HTML5 3D衣服摇摆动画特效
Mar 17 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
Apr 19 HTML / CSS
amazeui 验证按钮扩展的实现
Aug 21 HTML / CSS
HTML5在手机端实现视频全屏展示方法
Nov 23 HTML / CSS
移动端HTML5开发神器之vconsole详解
Dec 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 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
php获取字段名示例分享
2014/03/03 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
Python基本语法经典教程
2016/03/11 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
岗位职责定义及内容
2013/11/08 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
酒店秘书求职信范文
2014/02/17 职场文书
民主评议党员个人总结
2015/02/13 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
高中物理教学反思
2016/02/19 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
2022年显卡天梯图(6月更新)
2022/06/17 数码科技
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers