利用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 相关文章推荐
获取焦点时,利用js定时器设定时间执行动作
Apr 02 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
Aug 25 Javascript
Node.js编程中客户端Session的使用详解
Jun 23 Javascript
jquery调整表格行tr上下顺序实例讲解
Jan 09 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
Aug 18 Javascript
three.js实现3D影院的原理的代码分析
Dec 18 Javascript
Vue 中mixin 的用法详解
Apr 23 Javascript
用Fundebug插件记录网络请求异常的方法
Feb 21 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
Apr 12 Javascript
jquery传参及获取方式(两种方式)
Feb 13 jQuery
js实现登录时记住密码的方法分析
Apr 05 Javascript
angular异步验证器防抖实例详解
Mar 31 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
PHP 的 __FILE__ 常量
2007/01/15 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
JS 文件大小判断的实现代码
2010/04/07 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
python中List的sort方法指南
2014/09/01 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python3 flask实现文件上传功能
2020/03/20 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
出生公证委托书
2014/04/03 职场文书
企业管理标语
2014/06/10 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android