当前位置: 萬仟网 > IT编程>开发语言>JavaScript > 利用js-cookie实现前端设置缓存数据定时失效

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

2019年07月18日 18:01  | 萬仟网IT编程  | 我要评论

一、背景

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

二、实现过程

前端设置数据定时失效的可以有下面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)
}

三、总结

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

◎已有 0 人评论

Copyright © 2019  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com