利用js-cookie实现前端设置缓存数据定时失效


Posted in Javascript onJune 18, 2019

一、背景

业务需要在前端进行数据的缓存,到期就删除再进行获取新数据。

二、实现过程

前端设置数据定时失效的可以有下面2种方法:

1、当数据较大时,可以利用localstorage,存数据时候写入一个时间,获取的时候再与当前时间进行比较
2、如果数据不超过cookie的限制大小,可以利用cookie比较方便,直接设置有效期即可。
3、更多(请大神指点)

利用localstorage实现

localstorage实现思路:

1、存储数据时加上时间戳

在项目开发中,我们可以写一个公用的方法来进行存储的时候加上时间戳

export function setLocalStorageAndTime (key, value) {
 window.localStorage.setItem(key, JSON.stringify({ data: value, time: new Date().getTime() }))
}

项目中应用

存储

// 有数据再进行存储
   setLocalStorageAndTime('XXX', {name: 'XXX'})

读取

// 判断是否返回为null或者失效
getLocalStorageAndTime('XXX', 86400000)

2、获取数据时与当前时间进行比较

export function getLocalStorageAndTime (key, exp = 86400000) {
 // 获取数据
 let data = window.localStorage.getItem(key)
 if (!data) return null
 let dataObj = JSON.parse(data)
 // 与过期时间比较
 if (new Date().getTime() - dataObj.time > exp) {
  // 过期删除返回null
  removeLocalStorage(key)
  console.log('信息已过期')
  return null
 } else {
  return dataObj.data
 }
}

利用cookie实现

我们用js-cookie这款插件来设置cookie,比较方便,可以自行查看文档。

js-cookie 的示例中只有以天为单位的有效期:

Cookies.set('name', 'value', { expires: 7 }); // 7 天后失效

官方文档只要设置天数,没有时分秒,这样我们想设置更小单位的时候无法下手,其实也可以设置时间戳来处理时间的,下面这种方式可以设置任意单位的有效期:

let seconds = 10;
let expires = new Date(new Date() * 1 + seconds * 1000);
Cookies.set('username', 'tanggaowei', { expires: expires }); // 10 秒后失效

贴上利用js-cookie的封装, 记得 npm i js-cookie

import Cookies from 'js-cookie'

/*
* 设置cookies
* */
export function getCookies (key) {
 return Cookies.get(key)
}
/*
* 设置Cookies
* */
export function setCookies (key, value, expiresTime) {
 let seconds = expiresTime
 let expires = new Date(new Date() * 1 + seconds * 1000)
 return Cookies.set(key, value, { expires: expires })
}
/*
* 移除Cookies
* */
export function removeCookies (key) {
 return Cookies.remove(key)
}

三、总结

上面两个方法各有各的优点和缺点,如果小伙伴们有更好方法,麻烦留言互相学习

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

Javascript 相关文章推荐
javascript静态页面传值的三种方法分享
Nov 12 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
Dec 08 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
Jun 16 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
Nov 30 Javascript
angularjs中使用ng-bind-html和ng-include的实例
Apr 28 Javascript
原生JS实现N级菜单的代码
May 21 Javascript
jQuery中 DOM节点操作方法大全
Oct 12 jQuery
vue使用 better-scroll的参数和方法详解
Jan 25 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 Javascript
vue+elementUi图片上传组件使用详解
Aug 20 Javascript
layui之table checkbox初始化时选中对应选项的方法
Sep 02 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
Feb 27 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 #Javascript
实用Javascript调试技巧分享(小结)
Jun 18 #Javascript
Angular中innerHTML标签的样式不起作用的原因解析
Jun 18 #Javascript
小程序click-scroll组件设计
Jun 18 #Javascript
在JavaScript中如何访问暂未存在的嵌套对象
Jun 18 #Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 #Javascript
JS删除String里某个字符的方法
Jan 06 #Javascript
You might like
我的论坛源代码(三)
2006/10/09 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
Stop SQL Server
2007/06/21 Javascript
jQuery 使用手册(六)
2009/09/23 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
javascript截取字符串小结
2015/04/28 Javascript
Bootstrap精简教程
2015/11/27 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
npm 下载指定版本的组件方法
2018/05/17 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 字典与字符串的互转实例
2017/01/13 Python
python基础之入门必看操作
2017/07/26 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
美国紧身牛仔裤品牌:NYDJ
2017/05/24 全球购物
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
设计师珠宝:Ylang 23
2018/05/11 全球购物
2015年大学生暑期实习报告
2015/07/13 职场文书
小学运动会加油稿
2015/07/22 职场文书
Nginx的基本概念和原理
2022/03/21 Servers
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js
python多次执行绘制条形图
2022/04/20 Python