自己封装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的 ...
随机推荐
- docker的安装教程
一.Docker服务安装 Docker 支持以下的 Ubuntu 版本: Ubuntu Precise 12.04 (LTS) Ubuntu Trusty 14.04 (LTS) Ubuntu Wil ...
- angularjs实例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- 1.7Oob对象的创建局部变量
1:局部变量不会被系统自动初始化,所以局部变量必须进行初始化操作. 2:break是跳出当前循环体,return是跳出当前循环体和方法 并且结束外围循环体和方法,continue是跳过本次循环 3:创 ...
- PrimeNG之FileUpload
--文件上传是一个支持拖放,多文件上传,自动上传,进度跟踪和验证的上传. Import import {FileUploadModule} from 'primeng/primeng'; Gettin ...
- MAC OSX Xcode硬盘清理
1.移除对旧设备的支持影响:可重新生成:再连接旧设备调试时,会重新自动生成.我移除了4.3.2, 5.0, 5.1等版本的设备支持.路径:~/Library/Developer/Xcode/iOS D ...
- 001-CPU多级缓存架构
一.基本概念 大致关系: CPU Cache --> 前端总线 FSB (下图中的Bus) --> Memory 内存 CPU 为了更快的执行代码.于是当从内存中读取数据时,并不是只读自己 ...
- python之requests模块快速上手
安装 pip3 install requests 使用 发送请求 import requests r = requests.get('http://www.baidu.com') 还可以如下方式发送不 ...
- sql server 按年月日分组
sql server 按年月日分组 ----------------------------------------------- --author:yangjinwang --date:2017- ...
- 在java中,将String类型字符串s赋值为null后,将字符串与其他字符串拼接后得到结果出现了null字符串与其他字符连接的样式
String s = null; s += "hello"; System.out.println(s); 结果为:nullhello 原因: 先应用String.valueOf ...
- 【数据使用】3k水稻数据库现成SNP的使用
---恢复内容开始--- 我们经常说幻想着使用已有数据发表高分文章,的确,这样的童话故事每天都在发生,但如何走出第一步我们很多小伙伴不清楚,那么我们就从水稻SNP数据库的使用来讲起. http://s ...