introduction
在 web 开发中,我们知道 cookie、session、localStorage
都可以保存用户的数据,cookie
的 domain、path 限制了 cookie 的跨域, 有数量和大小的限制,可以设置有效时间。 session
是后台在浏览器注入一个设置了 httponly 的不可读取的 cookie , session data
由后台保存在数据库或者内存中,在web中,session 是靠 cookie 作为唯一标示来实现的,也可以设置过期时间。 localStorage
是 H5 的数据存储办法, 也是有大小限制的,但是不可以设置过期时间。 本文主要说的是如何自定义办法让 localStorage
实现过期时间。
module.exports = {
// 过期时间,默认30天
age: 30 * 24 * 60 * 60 * 1000,
/**
* 设置过期时间
* @param age
* @returns {exports}
*/
setAge: function (age) {
this.age = age;
return this;
},
/**
* 设置 localStorage
* @param key
* @param value
*/
set: function (key, content) {
localStorage.removeItem(key);
let _time = new Date().getTime();
let _age = this.age;
let value = {};
value._value = content;
// 加入时间
value._time = _time;
// 过期时间
value._age = _time + _age;
localStorage.setItem(key, JSON.stringify(value));
return this;
},
/**
* 判断一个 localStorage 是否过期
* @param key
* @returns {boolean}
*/
isExpire: function (key) {
var isExpire = true,
value = localStorage.getItem(key),
now = new Date().getTime();
if (value) {
value = JSON.parse(value);
// 当前时间是否大于过期时间
isExpire = now > value._age;
} else {
// 没有值也是过期
}
return isExpire;
},
/**
* 获取某个 localStorage 值
* @param key
* @returns {*}
*/
get: function (key) {
let isExpire = this.isExpire(key);
let value = null;
if (isExpire) return value;
value = localStorage.getItem(key);
value = JSON.parse(value);
return value._value;
}
};
usage
var localstorage = require('./localstorage.js');
localstorage.setAge(24*60*60*1000).set('a': 'abc').set('b',{a:1,b:2})
在ios设备上无法重复setItem()
另外,在iPhone/iPad上有时设置setItem()时会出现诡异的QUOTA_EXCEEDED_ERR错误,这时一般在setItem之前,先removeItem()就ok了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。