网站开发中,使用Cookies一般都会设置过期时间来实现开发需求。但手机app没有域名的概念,也就谈不上使用Cookies啦,但我们可以选择使用localStorage来实现Cookies类似的功能。
一个常用的场景,是需要存储localStorage数据,但该数据是有一定时效性的,也就是在存储数据的同时也需要设置一个过期时间。
了解localStorage用法的童鞋应该知道,该方法本身是不支持直接设置过期时间的。使用localStorage有诸多的限制,如:只能存储字符串格式的数据,再者就是我们现在正在讨论的“localStorage能不能设置过期时间”。但我们可以扩展localStorage的功能,以实现“localStorage 设置过期时间”的这一开发需求。
实现源代码如下:
// 以分钟为单位,设置localStorage过期时间,用于存储服务器数据 // set参数expire可不传,setItem到期时间标识expire会标识为-1,get时无过期时间,直接返回set中的val var localStorageUtil = { set(key, val, expire){ let exp = expire ? Date.now() + expire*1000*60 : -1; localStorage.setItem(key, JSON.stringify({value: val, expire: exp})); console.log('set '+key+':'+JSON.stringify({value: val, expire: new Date(exp).toLocaleString()})); }, get(key){ let data = localStorage.getItem(key); // console.log(data); if(!data) return null; let dataObj = JSON.parse(data); if(dataObj.expire == -1) return dataObj.value; if(Date.now() >= dataObj.expire){ localStorage.removeItem(key); return null; }else { return dataObj.value; } } };
注意看源码中的注释,以帮助理解代码实现逻辑,这里列举几个调用方法,加以说明,以帮助大家更好理解这个扩展过的localStorage怎么使用。
设置带/不带过期时间的localStorage:
localStorageUtil.set(key1,1,60)// 存储数字1,该localStorage值有效时间为60分钟 localStorageUtil.set(key1,'{a:1,b:2}',5) //存储json对象,该localStorage值有效时间为5分钟 localStorageUtil.set(key1,1) //存储数字1,该localStorage值不存在过期时间,等同于localStorage.setItem(key1, 1),当只需要存储无过期时间的非json对象(如数字或字符串)数据时,推荐直接使用localStorage.setItem即可
读取带/不带过期时间的localStorage:
localStorageUtil.get(key1)
源代码不多,好好理解下,相信你也能很好的使用该扩展过的localStorage方法来满足日常的开发需求!
上一篇: App内调起qq应用,打开指定qq号聊天窗口
下一篇: 解决webstorm显示中文难看、丑的问题
0条评论( 网友:0 条,站长:0 条 ) 网友评论{有您的评论更精彩....}