原 荐 如何给localStorage设置一个有效期?

栏目: Html5 · 发布时间: 7年前

如何给localStorage设置一个有效期?

  苏南-首席填坑官 发布于 12分钟前

字数 1454

阅读 1

收藏 0

开发十年,就只剩下这套 Java 开发体系了 >>> 原 荐 如何给localStorage设置一个有效期?

原 荐 如何给localStorage设置一个有效期?

引言

​这个话题其实在上次分享 <小程序填坑记里讲过了> 已经讲过( 大佬可绕过哦~ ),但后来QQ里/评论都有些同学,提到了一些疑问,问能否单独整理一篇更为详细的分享,讲解一下细节和完善提到的不足,如是有了下文。

这里是 @IT·平头哥联盟 ,我是 首席填坑官苏南 ,用心分享 做有温度的攻城狮。

G众H: honeyBadger8 ,交-流:912594095

思考点

从我们接触前端起,第一个熟悉的存储相关的Cookie或者来分析我们生活中密切相关的淘宝、物流、闹钟等事物来说起吧,

订单结束

!> 以上种种,我们能得出一个结论任何一件事、一个行为动作,都有一个时间、一个节点,甚至我们可以黑 localStorage ,就是一个完善的API,为什么不能给一个设置过期的机制,因为 sessionStorageCookie 并不能满足我们实际的需求。

实现思路

抱歉,黑 localStorage 不完善,有点夸张了,综合上述的总结,问题就简单了,给 localStorage 一个过期时间,一切就都so easy ?到底是不是,来看看具体的实现吧:

简单回顾

//示例一:
localStorage.setItem('test',1234567);
let test = localStorage.getItem('test');
console.log(typeof test, test); 

//示例二:
localStorage['name'] = '苏南';
console.log(localStorage['name']);
/*
输出:
"1234567" ,'苏南',
这里要注意,1234567 存进去时是number 取出来就成string了
*/

重写 set(存入) 方法:

  • 首先有三个参数 key、value、expired ,分别对应 键、值、过期时间,
  • 过期时间的单位可以自由发挥,小时、分钟、天都可以,
  • 注意 点:存储的值可能是数组/对象,不能直接存储,需要转换 JSON.stringify
  • 这个时间如何设置呢?在这个值存入的时候在键(key)的基础上扩展一个字段,如:key+' expires ',而它的值为当前 时间戳 + expired过期时间
  • 具体来看一下代码
set(key, value, expired) {
	/*
	* set 存储方法
	* @ param {String} 	key 键
	* @ param {String} 	value 值,
	* @ param {String} 	expired 过期时间,以分钟为单位,非必须
	* @ 由@IT·平头哥联盟-首席填坑官∙苏南 分享
	*/
	let source = this.source;
	source[key] = JSON.stringify(value);
	if (expired){
		source[`${key}__expires__`] = Date.now() + 1000*60*expired
	};
	return value;
}

重写 get(获取) 方法:

  • 获取数据时,先判断之前存储的时间有效期,与当前的时间进行对比;
  • 但存储时 expired 为非必须参数,所以默认为当前时间+1,即长期有效;
  • 如果存储时有设置过期时间,且在获取的时候发现已经小于当前时间戳,则执行删除操作,并返回空值;
  • 注意 点:存储的值可能是数组/对象,取出后不能直接返回,需要转换 JSON.parse
  • 具体来看一下代码
get(key) {
	/*
	* get 获取方法
	* @ param {String} 	key 键
	* @ param {String} 	expired 存储时为非必须字段,所以有可能取不到,默认为 Date.now+1
	* @ 由@IT·平头哥联盟-首席填坑官∙苏南 分享
	*/
	const source = this.source,
	expired = source[`${key}__expires__`]||Date.now+1;
	const now = Date.now();

	if ( now >= expired ) {
		this.remove(key);
		return;
	}
	const value = source[key] ? JSON.parse(source[key]) : source[key];
	return value;
}

重写 remove(删除) 方法:

  • 删除操作就简单了,;
remove(key) {
	const data = this.source,
		value = data[key];
	delete data[key];
	delete data[`${key}__expires__`];
	return value;
}

优化点:

  • 记得上次有个 同学 ,是这么 评论 的:「 删除缓存能放到constructor里面执行么,放到get里面 不取就一直在那是不是不太好?」;
  • 为什么不用 for in 而是 for ? for in 循环遍历对象的属性时,原型链上的所有属性都将被访问,解决方案:使用 hasOwnProperty 方法过滤或Object.keys会返回自身可枚举属性组成的数组;
class storage {

	constructor(props) {
		this.props = props || {}
		this.source = this.props.source || window.localStorage
		this.initRun();
	}
	initRun(){
		/*
		* set 存储方法
		* @ param {String} 	key 键
		* @ param {String} 	value 值,存储的值可能是数组/对象,不能直接存储,需要转换 JSON.stringify
		* @ param {String} 	expired 过期时间,以分钟为单位
		* @ 由@IT·平头哥联盟-首席填坑官∙苏南 分享
		*/
		const reg = new RegExp("__expires__");
		let data = this.source;
		let list = Object.keys(data);
		if(list.length > 0){
			list.map((key,v)=>{
				if( !reg.test(key )){
					let now = Date.now();
					let expires = data[`${key}__expires__`]||Date.now+1;
					if (now >= expires ) {
						this.remove(key);
					};
				};
				return key;
			});
		};
	}
}

总结:

以上就是今天为大家总结的分享,您GET到了吗?小程序、sessionStorage、localStorage,都适用,做些许调整即可哦,希望今天的分享能给您带来些许成长,如果觉得不错,记得关注下方 G众H 哦,每周第一时间为您推最新分享。

原 荐 如何给localStorage设置一个有效期?

作者:苏南 - 首席填坑官

链接: https://blog.csdn.net/weixin_43254766/article/details/83618630

交-流:912594095、G众H: honeyBadger8

本文原创,著作权归作者所有。商业转载请联系 @IT·平头哥联盟 获得授权,非商业转载请注明原链接及出处。

原 荐 如何给localStorage设置一个有效期?

© 著作权归作者所有

共有人打赏支持

原 荐 如何给localStorage设置一个有效期?

苏南-首席填坑官

粉丝 0

博文 8

码字总数 23534

作品 0

深圳

前端工程师

提问

加载中

评论( 1 )

原 荐 如何给localStorage设置一个有效期?
苏南-首席填坑官

10分钟前

清风舞明月,幽梦落花间。

一梦醒来,恍如隔世,

两眉间,相思尽染。——周三早安,愿您安好!

删除一条评论

评论删除后,数据将无法恢复

取消

确定

相关文章 最新文章

第139天:详解cookie、 sessionStorage 和localStorage

1.cookie:存储在用户本地终端上的数据。有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密。一般应用最典型的案列就是判断注册用户是否...

半指温柔乐

01/08

0

0

《前端之路》之 Cookie && localStorage && Session Storage 缓存相关

08: Cookie && localStorage && Session Storage 缓存相关 客户端、前端 存储 一、 起 因 localStorage.setItem(key,value) 将value存储到key字段localStorage.removeItem(key) 删除指定key......

SmallW

08/01

0

0

原 荐 如何给localStorage设置一个有效期?
webStorage和cookie的区别

共同点: 都是保存在浏览器端,且同源的 cookie有什么缺点? Cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB 安全性问题。如果cookie被人拦截了,那人就...

君丶不易

2017/11/03

0

0

史无前例的 HTML5 资源参考指南

尽管 HTML5 规范在 2014 年之前不会有正式版本,很多设计师已经开始试水高级浏览器已经支持的部分 HTML5 功能。HTML5 为 Web 设计和应用开发打开了一扇全新的门,原生支持了以前只可能使用 ...

李长春

2012/03/02

0

1

给网页设计师的30个HTML5学习资源

早在几个星期前,Adobe就发布了Dreamweaver CS5 HTML5 Pack的预览版下载。众所周知,HTML5在互联网领域掀起了一场大论战,并让Adobe的日子很难熬。HTML5致力于为前端开发提供全面的标记语 言...

晨曦之光

2012/03/09

0

0

没有更多内容

加载失败,请刷新页面

加载更多
Jersey 2.x Glassfish 中基于 Servlet 的应用

如果你使用的是 Glassfish 作为你应用服务器,你不需要在你的引用中包含引用任何东西,所有你需要的都已经包含进去了。 你只需要定义 JAX-RS API 以便于你能够对你的应用进行编辑,使用 (p...

honeymose

今天

4

0

AudioContext技术和音乐可视化(1)

写在最前,测试博客在这里,直接欣赏完成可视化效果。代码不日在github公开,性能目前巨烂,RadialGradient损耗巨大,优化正在提上日程。 转载注明来源。 扒掉网页上js的烦请留下js里的顶端注...

御坂网络路由器

今天

4

0

MongoDB | Linux 安装

Hi,好久不见,有没有想我啊 下载安装包 去 MongoDB Download Center 下载适合自己的版本。 安装 将安装包通过FTP上传到服务器,然后解压要自己的目录。 比如: # 解压tar -zxvf mongodb-li...

JAVA_冯文议

今天

4

0

原 荐 如何给localStorage设置一个有效期?
Redis源码阅读笔记-服务器启动和初始化

服务器的启动 Redis 服务器的main函数是在server.c中。 // server.cint main(int argc, char **argv) { struct timeval tv; int j; /* 对服务器一些常量等进行设置 */ /*...

Jian_Ming

今天

2

0

OSChina 周三乱弹 —— 你们谁给我把盖扣上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ xiaoshiyue:分享Shawn Mendes的单曲《Never Be Alone / Hey There Delilah (Live At Madison Square Garden/ 2016 / Medley)》 《Never B......

小小编辑

今天

57

7

原 荐 如何给localStorage设置一个有效期?

没有更多内容

加载失败,请刷新页面

加载更多

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

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Agile Web Development with Rails 4

Agile Web Development with Rails 4

Sam Ruby、Dave Thomas、David Heinemeier Hansson / Pragmatic Bookshelf / 2013-10-11 / USD 43.95

Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details. Tens of thousands of deve......一起来看看 《Agile Web Development with Rails 4》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具