自己封装myLocalStorage,使其有有效期
项目中遇见 cookie 值存不上,what fuck?什么情况,不知道。用$.cookie 和原生的 cookie 都不行,存上值,就被删了一样。找不见地方。考虑到项目比较大,去找得代价,还不如换种实现方式,于是就想起来用 localStorage 了。然后 localStorage 又不像 $.cookie 那样有过期时间。因此需要自己去封装一下,故而,有了这个一个博客。勿喷!
调用方式
setItem()
与 $.cookie() 类似,expires 支持传入一个时间对象(object),有效时间的数值(number, 单位:毫秒 或者 天);
当 expires 值类型为 number ,且值小于等于当年的总天数时,表示的为天,否则表示毫秒;
光说,不行,看看下面:
调用方式:
var myLocalStorage = require('');
myLocalStorage.setItem("test1", "Mobro1", {expires: 1});
myLocalStorage.setItem(
"test2",
"Mobro2",
{expires: new Date(new Date().getTime() + 1000 * 60 * 60 * 24)}
);
myLocalStorage.setItem("test3", "Mobro3", {expires: 1000 * 60 * 10});
test1: 有效期为 1 天。
test2: 有效期为 1 天。
test3: 有效期为 10 分钟。
getItem()
与 $.cookie() 也是类似的,取那个 localStorage 值,只需要传入一个 key 键名就好了。若没有找到 当前 key 对应的 localStorage 值,则返回 null 对象。
removeItem()
删除一个 localStorage 值,删除成功,返回true,否则返回 false
继续往下看:
myLocalStorage.getItem("test1") // Mobro1
myLocalStorage.removeItem("test1"); // 如果成功
myLocalStorage.getItem("test1") // null
代码纯属手敲,逻辑上一定会有什么漏洞的,还望各位大牛不吝赐教。
只与同好争高下,不与傻瓜论短长。 -- 《欢乐颂》电视剧台词。
最近看了一部日本的电影,《希望在别处》,感觉还是不错的,给推荐一下。
四川老家大雨,火车拿去压桥了;
读大学的地方兰州大雨,车子被冲跑了;
工作地北京大雨,天天上班穿拖鞋,每天丢一把伞;
哈哈哈哈
>oo<
完整源码
var myLocalStorage = {
setItem: function(key, value, exp) {
var obj = new Object(),
expires = exp.expires || null;
obj.value = value;
obj.time = new Date().getTime();
// expires 类型
if (expires === null) {
delete obj.expires;
} else if (typeof expires === "object") {
obj.expires = expires.getTime() - obj.time;
} else if (typeof expires === "number") {
if ((expires | 0) !== expires) {
throw new Error("expires must be integer number!");
}
// expires 小于 365、366 则,按天算。否则按时间戳算
if (expires <= getYearDays() && expires > 0) {
obj.expires = expires * 1000 * 60 * 60 * 24;
} else if (expires > getYearDays()) {
obj.expires = expires;
} else if (expires <= 0) {
this.removeItem(key);
}
}
localStorage.setItem(key, JSON.stringify(obj));
},
getItem: function(key) {
var obj = JSON.parse(localStorage.getItem(key));
if (obj === "null" || obj === null) return null;
var expires = obj.expires,
now = new Date().getTime(),
time = obj.time;
if (now - time >= expires ||
now < time) {
localStorage.removeItem(key);
return null;
} else {
return obj.value;
}
},
// 删除成功返回 true, 否则返回 false
removeItem: function(key) {
if (this.getItem(key) !== null) {
localStorage.removeItem(key);
return this.getItem(key) === null ? true : false;
}
return true;
},
keys: function(key) {
}
}
function getYearDays () {
return new Date().getFullYear() % 4 === 0 ? 366 : 365;
}
module.exports = myLocalStorage;
自己封装myLocalStorage,使其有有效期的更多相关文章
- Http请求封装(对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高)
package com.ad.ssp.engine.common; import java.io.IOException; import java.util.ArrayList; import jav ...
- 编译kubeadm使生成证书有效期为100年
目录 问题 编译 检查结果 问题 当我使用kubeadm部署成功k8s集群时在想默认生成的证书有效期是多久,如下所示 /etc/kubernetes/pki/apiserver.crt #1年有效期 ...
- 探索Django验证码功能的实现 - DjangoStarter项目模板里的封装
前言 依然是最近在做的这个项目,用Django做后端,App上提交信息的时候需要一个验证码来防止用户乱提交,正好我的「DjangoStarter」项目脚手架也有封装了验证码功能,不过我发现好像里面只是 ...
- 【PCB】电子元件封装大全及封装常识
电子元件封装大全及封装常识 电子元件封装大全及封装常识 一.什么叫封装封装,就是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接.封装形式是指安装半导体集成电路芯片用的外壳.它不仅起着 ...
- 如何为编程爱好者设计一款好玩的智能硬件(九)——LCD1602点阵字符型液晶显示模块驱动封装(下)
六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...
- Java—继承、封装、抽象、多态
类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...
- JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结
JS DOM节点: 在JS DOM中节点的关系被定义为节点的属性: 通常有以下几种节点之间的关系: (这里的关系是所有浏览器都支持的) parentNode 父节点 childNodes ...
- SOP、DIP、PLCC、TQFP、PQFP、TSOP、BGA封装解释
1. SOP封装SOP是英文Small Outline Package的缩写,即小外形封装.SOP封装技术由1968-1969年菲利浦公司开发成功,以后逐渐派生出SOJ(J型引脚小外形封装).TSOP ...
- 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?
既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...
随机推荐
- map里面的set方法
let a=[1,2,3,4,1,2,3,4,1,4];let b= new Set(a);console.log(b) 还有add方法介绍下: let a=new Set();let b=[1,1, ...
- Broadcast
静态注册广播接收器 1. 活动中创建内部类继承BroadcastReceiver实现 onReceive函数 2. new 一个内部类的对象 3. registerReceiver注册内部类 4. 在 ...
- Python学习之旅(三十六)
Python基础知识(35):电子邮件(Ⅱ) 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上 收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3 Pytho ...
- JAVAMail邮件服务器
SMTP:simple mail transfer protocol(简单邮件传输协议),是internate传输mail的基本协议,也是TCP/IP协议组成员, POP3:邮局协议第三版,是inte ...
- redis数据库通过dump.rdb文件恢复数据库或者数据库迁移
环境:centos7.2软件:redis-3.2.10(yum安装) 情景一:公司之前的redis没有开启aof模式,一直是rdb模式,但是数据又非常重要,数据一点也不能丢失,所以需要开启aof,但是 ...
- spark-sql将Rdd转换为DataFrame进行操作的两种方法
SparkConf sparkConf = new SparkConf() .setMaster("local").setAppName("ClzMap"); ...
- java框架之SpringCloud(6)-Zuul路由网关
介绍 Zuul 包含了对请求的路由和过滤两个最重要的功能: 其中路由功能服务将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础.而过滤的功能则负责对请求的处理过程进行干预,是实现请求校验 ...
- python基础(6)-深浅拷贝
赋值 字符串和数字 # id()函数可以获取变量在内存中的地址标识 num1 = 2; num2 = 2; print(id(num1)) # result:8791124202560 print(i ...
- vue 环境报错 chromedriver@2.44.1 install: `node install.js`
解决办法: 1. yarn add chromedriver -g 2.yarn add chromedriver --chromedriver_cdnurl=http://cdn.npm.taoba ...
- oracle数据库导出与导入
一.查询导出库的字符集 3个 1.查询oracle server端的字符集 SQL>select userenv('language') from dual; USERENV('LANGUAGE ...