localStorage用于持久化的存储;但是我想限时保存用户的登录信息,除了cookie和session,localStorage应该也可以做到;cookie字符长度有限制,不够6;session在后端保存;现在我要在前端保存用户信息,而不用每次后台判断或前端请求去判断;因为如果页面由前端输出,那么每次都得请求一次用户是否登录;
代码不多,大家都懂:
1module.exports={
2 age:0,
3 maxAge:function (age) {
4 this.age=age;
5 return this;
6 },
7 set:function(name,json){
8 localStorage.removeItem(name);
9 json.__time=new Date().getTime();
10 json.__age=this.age;
11 localStorage.setItem(name,JSON.stringify(json));
12 return this;
13 },
14 getInfo:function(name){
15 var info=localStorage.getItem(name);
16 return info?JSON.parse(info):null;
17 },
18 isExpired:function(name) {
19 var logined=localStorage.getItem(name),
20 _time=0,
21 iTime=new Date().getTime(),
22 timeLength=0;
23 if (logined) {
24 logined=JSON.parse(logined);
25 _time=logined.__time;
26 timeLength=iTime-_time;
27 return timeLength>=logined.__age;
28 }else {
29 return true;
30 }
31 },
32 isLogined:function(name,fn) {
33 var user='',age=this.age;
34 if (!this.isExpired(name)) {
35 user=JSON.parse(localStorage.getItem(name));
36 }else{
37 localStorage.removeItem(name);
38 }
39 if (user) {
40 fn&&fn(user);
41 }else {
42 fn&&fn();
43 }
44 }
45};
使用:
1var store=require('./modules/store');
前端在用户登录成功后保存基本信息:
1store.maxAge(1000*60*60*24).set('userinfo',{
2 name:'hf',
3 age:'18'
4 });
以JSON格式保存用户的信息name和age,字段名userinfo,保存时长为一天;
下次用户访问判断用户信息是否过期:
1store.isExpired('userinfo');
2//返回true|false
或者直接判断限定时间内是否登录了:
1store.isLogined('userinfo',function(info){
2 if (info) {
3 console.log(info)
4 }else {
5 console.log(false)
6 }
7 });
8//若在限定时间内登录了,回调用户信息;若没有登录,回调里做其他操作
获取登录信息,返回用户信息或null;也可以判断是否登录;
1store.getInfo('userinfo');
2//返回info或null