|
@@ -5,60 +5,117 @@
|
|
|
*/
|
|
|
'use strict'
|
|
|
var Session = {
|
|
|
- set:function(key,value,arg1,arg2){
|
|
|
- if(!key || !value) return null;
|
|
|
- let sessionData;
|
|
|
- if(sessionid){
|
|
|
- try{
|
|
|
- sessionData = JSON.parse(FILE.readFileSync(Core.Path.Session + '/' + sessionid,'UTF-8'));
|
|
|
- }catch(e){
|
|
|
- sessionid = '';
|
|
|
- }
|
|
|
- }
|
|
|
- if(!sessionid){
|
|
|
- sessionid = MD5(new Date().getTime()+''+Math.floor(Math.random()*9000+1000));
|
|
|
- sessionData = {id:sessionid,expire:(new Date().getTime()+Config.SessionExpire*60000)};
|
|
|
- }
|
|
|
-
|
|
|
- sessionData[key]=value;
|
|
|
+ set:function(key,value,callback){
|
|
|
+ callback = Manager.buildCallback(callback);
|
|
|
+ if(!key || value==null) return callback.call(this,'Session key or value is empty',null);
|
|
|
+ let _this = this;
|
|
|
+ let session = {};
|
|
|
+
|
|
|
+ session.id = MD5(new Date().getTime()+''+Math.floor(Math.random()*9000+1000));
|
|
|
+ session.data = {};
|
|
|
+ session.data[key] = value;
|
|
|
+ session.expire = Config.SessionExpire*60;
|
|
|
+ session.expireTime = new Date().getTime()+session.expire*1000;
|
|
|
|
|
|
- FILE.writeFileSync(Core.Path.Session + '/' + sessionid,JSON.stringify(sessionData),'UTF-8');
|
|
|
- return sessionid;
|
|
|
+ Manager.set(session,function(err){
|
|
|
+ if(err) return callback.call(_this,'Session set err;',null);
|
|
|
+ callback.call(_this,null,session);
|
|
|
+ });
|
|
|
},
|
|
|
- get:function(sessionid,key,callback){
|
|
|
- if(!sessionid) return null;
|
|
|
- let sessionData;
|
|
|
- try{
|
|
|
- sessionData = JSON.parse(FILE.readFileSync(Core.Path.Session + '/' + sessionid,'UTF-8'));
|
|
|
- if(sessionData.expire < new Date().getTime()){
|
|
|
- sessionData = null;
|
|
|
- Session.clear(sessionid);
|
|
|
- }
|
|
|
- }catch(e){
|
|
|
- sessionData = null;
|
|
|
- }
|
|
|
- if(key && sessionData){
|
|
|
- if(sessionData[key]!=undefined){
|
|
|
- return sessionData[key];
|
|
|
+ update:function(sessionid,key,value,callback){
|
|
|
+ callback = Manager.buildCallback(callback);
|
|
|
+ if(!sessionid || !key || value==null) return callback.call(this,'Session id,key or value is empty',null);
|
|
|
+ let _this = this;
|
|
|
+ Manager.get(sessionid,function(err,result){
|
|
|
+ let session;
|
|
|
+ if(err || result == null){
|
|
|
+ session = {id:sessionid,data:{}};
|
|
|
}else{
|
|
|
- return null;
|
|
|
+ session = result;
|
|
|
}
|
|
|
- }
|
|
|
- return sessionData;
|
|
|
+
|
|
|
+ if(err || result == null || Config.Session.AutoRefresh){
|
|
|
+ session.expire = Config.SessionExpire*60;
|
|
|
+ session.expireTime = new Date().getTime()+session.expire*1000;
|
|
|
+ }
|
|
|
+
|
|
|
+ session.data[key] = value;
|
|
|
+ Manager.set(session,function(err){
|
|
|
+ if(err) return callback.call(_this,'Session set error');
|
|
|
+ callback.call(_this,null,session)
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ get:function(sessionid,callback){
|
|
|
+ callback = Manager.buildCallback(callback);
|
|
|
+ if(!sessionid) return callback.call(this,'Session id is empty',null);
|
|
|
+ let _this = this;
|
|
|
+ Manager.get(sessionid,function(err,result){
|
|
|
+ callback.call(_this,null,result);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ getKeyValue:function(sessionid,key,callback){
|
|
|
+ callback = Manager.buildCallback(callback);
|
|
|
+ if(!sessionid || !key) return callback.call(this,'Session id or key is empty',null);
|
|
|
+ let _this = this;
|
|
|
+ Session.get(sessionid,function(err,result){
|
|
|
+ if(err || !result) return callback.call(_this,null);
|
|
|
+ callback.call(_this,null,result.data[key]);
|
|
|
+ });
|
|
|
},
|
|
|
clear:function(sessionid){
|
|
|
if(!sessionid) return;
|
|
|
- try{
|
|
|
- FILE.rmdirSync(Core.Path.Session + '/' + sessionid);
|
|
|
- }catch(e){}
|
|
|
+ Manager.clear(sessionid);
|
|
|
}
|
|
|
};
|
|
|
module.exports = Session;
|
|
|
|
|
|
-var FileManager = {
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-var MemcacheManager = {
|
|
|
-
|
|
|
+var Manager = {
|
|
|
+ get:function(sessionid,callback){
|
|
|
+ if(Config.Database.Memcache.on && Memcache){
|
|
|
+ Memcache.get('session_'+sessionid,function(err,result){
|
|
|
+ if(err) return callback(err);
|
|
|
+ callback(null,result);
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ let sessionData = null;
|
|
|
+ try{
|
|
|
+ sessionData = JSON.parse(FILE.readFileSync(Core.Path.Session + '/' + sessionid,'UTF-8'));
|
|
|
+ }catch(e){}
|
|
|
+ if(sessionData && sessionData.expireTime){
|
|
|
+ if(new Date().getTime()>sessionData.expireTime){
|
|
|
+ sessionData = null;
|
|
|
+ Manager.clear(sessionid);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ callback(null,sessionData);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ set:function(session,callback){
|
|
|
+ if(Config.Database.Memcache.on && Memcache){
|
|
|
+ Memcache.set('session_'+session.id,session,session.expire,function(err){
|
|
|
+ if(err){
|
|
|
+ Logger.error(err);
|
|
|
+ return callback(err);
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ FILE.writeFileSync(Core.Path.Session + '/' + session.id,JSON.stringify(session),'UTF-8');
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ clear:function(sessionid){
|
|
|
+ if(Config.Database.Memcache.on && Memcache){
|
|
|
+ Memcache.del('session_'+sessionid);
|
|
|
+ }else{
|
|
|
+ try{
|
|
|
+ FILE.rmdirSync(Core.Path.Session + '/' + sessionid);
|
|
|
+ }catch(e){}
|
|
|
+ }
|
|
|
+ },
|
|
|
+ buildCallback:function(callback){
|
|
|
+ if(callback && typeof callback=='function') return callback;
|
|
|
+ callback = function(){}
|
|
|
+ }
|
|
|
}
|