利用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 相关文章推荐
添加到收藏夹代码(兼容几乎所有的浏览器)
Jan 09 Javascript
JavaScript中OnLoad几种使用方法
Dec 15 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 Javascript
Javascript字符串浏览器兼容问题分析
Dec 01 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
Mar 03 Javascript
javascript实现的简单的表单验证
Jul 10 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
May 19 Javascript
Angular服务Request异步请求的实例讲解
Aug 13 Javascript
Vue 配合eiement动态路由,权限验证的方法
Sep 26 Javascript
微信小程序左右滚动公告栏效果代码实例
Sep 16 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
Apr 26 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之第一天
2006/10/09 PHP
php SQL之where语句生成器
2009/03/24 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
基于python中__add__函数的用法
2019/11/25 Python
如何基于Python创建目录文件夹
2019/12/31 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
什么是测试驱动开发(TDD)
2012/02/15 面试题
酒店管理专业毕业生推荐信
2013/11/10 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
小学感恩主题班会
2015/08/12 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis