UNPKG

aliez-session

Version:

aliez session midware

97 lines (83 loc) 1.9 kB
'use strict'; var qc = require('qcrypto'), qs = require('querystring'); // 有效时长,30分钟 var MAX_TIMEOUT = 30 * 60 * 1000; var ssdb = { // session数据 db : {}, // 设置session set : function(){ var id, data; if(arguments.length == 2){ id = arguments[0]; data = arguments[1]; }else if(arguments.length == 1){ id = ssdb.genID(); data = arguments[0]; }else{ return false; } ssdb.db[id] = { time: Date.now(), data: data }; return id; }, // 获取 get : function(id){ if('string' == typeof id){ return ssdb.db[id] ? ssdb.db[id].data : void(0); }else{ return false; } return false; }, // 更新时间 update : function(id){ if('string' == typeof id){ if(ssdb.db[id]){ ssdb.db[id].time = Date.now(); } }else{ return false; } return this; }, // 生成ID genID : function(ip){ ip = 'string' == typeof ip ? ip : (Math.Random() * 10000).toString(); var str = ip + Date.now() + Math.floor(Math.random() * 100000); return qc.sha1(str); } }; // 每分钟检测超时的session,删除超时的session setInterval(function(){ var now = Date.now(); for(var id in ssdb.db){ if(MAX_TIMEOUT < now - ssdb.db[id].time){ delete ssdb.db[id]; } } }, 60000); var session = function(req, res, done){ var id, obj, session; if(req.headers['cookie']){ obj = qs.parse(req.headers['cookie']); if(obj.ASID){ id = obj.ASID; session = ssdb.get(id); if(session){ req.session = session; ssdb.update(id);console.log(session); } } } res.session = function(data){ id = id ? id : ssdb.genID(req.socket.remoteAddress); ssdb.set(id, data); res.setHeader('Set-Cookie', ['ASID=' + id + ';path=/;httponly']); req.session = data; }; done(); }; module.exports = session;