利用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 相关文章推荐
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
Angular2  NgModule 模块详解
Oct 19 Javascript
JavaScript登录验证码的实现
Oct 27 Javascript
headjs实现网站并行加载但顺序执行JS
Nov 29 Javascript
详谈jQuery.load()和Jsp的include的区别
Apr 12 jQuery
JavaScript实现隐藏省略文字效果的方法
Apr 27 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
May 01 Javascript
JS实现简单的星期格式转换功能示例
Jul 23 Javascript
如何在 JavaScript 中更好地利用数组
Sep 27 Javascript
使用puppeteer爬取网站并抓出404无效链接
Dec 20 Javascript
Vue通过provide inject实现组件通信
Sep 03 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读取RSS feed的代码
2008/08/01 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
php中的异常和错误浅析
2017/05/03 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
window.location.hash 属性使用说明
2010/03/20 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
JS & JQuery 动态添加 select option
2016/06/08 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
django如何实现视图重定向
2019/07/24 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
局域网定义和特性
2016/01/23 面试题
大学新闻系求职信
2014/06/03 职场文书
法人代表任命书范本
2014/06/05 职场文书
五年级小学生评语
2014/12/26 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python