You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
2.3 KiB
131 lines
2.3 KiB
|
|
/*! |
|
* Connect - session - MemoryStore |
|
* Copyright(c) 2010 Sencha Inc. |
|
* Copyright(c) 2011 TJ Holowaychuk |
|
* MIT Licensed |
|
*/ |
|
|
|
/** |
|
* Module dependencies. |
|
*/ |
|
|
|
var Store = require('./store') |
|
, utils = require('../../utils') |
|
, Session = require('./session'); |
|
|
|
/** |
|
* Initialize a new `MemoryStore`. |
|
* |
|
* @api public |
|
*/ |
|
|
|
var MemoryStore = module.exports = function MemoryStore() { |
|
this.sessions = {}; |
|
}; |
|
|
|
/** |
|
* Inherit from `Store.prototype`. |
|
*/ |
|
|
|
MemoryStore.prototype.__proto__ = Store.prototype; |
|
|
|
/** |
|
* Attempt to fetch session by the given `sid`. |
|
* |
|
* @param {String} sid |
|
* @param {Function} fn |
|
* @api public |
|
*/ |
|
|
|
MemoryStore.prototype.get = function(sid, fn){ |
|
var self = this; |
|
process.nextTick(function(){ |
|
var expires |
|
, sess = self.sessions[sid]; |
|
if (sess) { |
|
sess = JSON.parse(sess); |
|
expires = 'string' == typeof sess.cookie.expires |
|
? new Date(sess.cookie.expires) |
|
: sess.cookie.expires; |
|
if (!expires || new Date < expires) { |
|
fn(null, sess); |
|
} else { |
|
self.destroy(sid, fn); |
|
} |
|
} else { |
|
fn(); |
|
} |
|
}); |
|
}; |
|
|
|
/** |
|
* Commit the given `sess` object associated with the given `sid`. |
|
* |
|
* @param {String} sid |
|
* @param {Session} sess |
|
* @param {Function} fn |
|
* @api public |
|
*/ |
|
|
|
MemoryStore.prototype.set = function(sid, sess, fn){ |
|
var self = this; |
|
process.nextTick(function(){ |
|
self.sessions[sid] = JSON.stringify(sess); |
|
fn && fn(); |
|
}); |
|
}; |
|
|
|
/** |
|
* Destroy the session associated with the given `sid`. |
|
* |
|
* @param {String} sid |
|
* @api public |
|
*/ |
|
|
|
MemoryStore.prototype.destroy = function(sid, fn){ |
|
var self = this; |
|
process.nextTick(function(){ |
|
delete self.sessions[sid]; |
|
fn && fn(); |
|
}); |
|
}; |
|
|
|
/** |
|
* Invoke the given callback `fn` with all active sessions. |
|
* |
|
* @param {Function} fn |
|
* @api public |
|
*/ |
|
|
|
MemoryStore.prototype.all = function(fn){ |
|
var arr = [] |
|
, keys = Object.keys(this.sessions); |
|
for (var i = 0, len = keys.length; i < len; ++i) { |
|
arr.push(this.sessions[keys[i]]); |
|
} |
|
fn(null, arr); |
|
}; |
|
|
|
/** |
|
* Clear all sessions. |
|
* |
|
* @param {Function} fn |
|
* @api public |
|
*/ |
|
|
|
MemoryStore.prototype.clear = function(fn){ |
|
this.sessions = {}; |
|
fn && fn(); |
|
}; |
|
|
|
/** |
|
* Fetch number of sessions. |
|
* |
|
* @param {Function} fn |
|
* @api public |
|
*/ |
|
|
|
MemoryStore.prototype.length = function(fn){ |
|
fn(null, Object.keys(this.sessions).length); |
|
};
|
|
|