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.
87 lines
1.8 KiB
87 lines
1.8 KiB
|
|
/*! |
|
* Connect - session - Store |
|
* Copyright(c) 2010 Sencha Inc. |
|
* Copyright(c) 2011 TJ Holowaychuk |
|
* MIT Licensed |
|
*/ |
|
|
|
/** |
|
* Module dependencies. |
|
*/ |
|
|
|
var EventEmitter = require('events').EventEmitter |
|
, Session = require('./session') |
|
, Cookie = require('./cookie') |
|
, utils = require('../../utils'); |
|
|
|
/** |
|
* Initialize abstract `Store`. |
|
* |
|
* @api private |
|
*/ |
|
|
|
var Store = module.exports = function Store(options){}; |
|
|
|
/** |
|
* Inherit from `EventEmitter.prototype`. |
|
*/ |
|
|
|
Store.prototype.__proto__ = EventEmitter.prototype; |
|
|
|
/** |
|
* Re-generate the given requests's session. |
|
* |
|
* @param {IncomingRequest} req |
|
* @return {Function} fn |
|
* @api public |
|
*/ |
|
|
|
Store.prototype.regenerate = function(req, fn){ |
|
var self = this; |
|
this.destroy(req.sessionID, function(err){ |
|
self.generate(req); |
|
fn(err); |
|
}); |
|
}; |
|
|
|
/** |
|
* Load a `Session` instance via the given `sid` |
|
* and invoke the callback `fn(err, sess)`. |
|
* |
|
* @param {String} sid |
|
* @param {Function} fn |
|
* @api public |
|
*/ |
|
|
|
Store.prototype.load = function(sid, fn){ |
|
var self = this; |
|
this.get(sid, function(err, sess){ |
|
if (err) return fn(err); |
|
if (!sess) return fn(); |
|
var req = { sessionID: sid, sessionStore: self }; |
|
sess = self.createSession(req, sess, false); |
|
fn(null, sess); |
|
}); |
|
}; |
|
|
|
/** |
|
* Create session from JSON `sess` data. |
|
* |
|
* @param {IncomingRequest} req |
|
* @param {Object} sess |
|
* @return {Session} |
|
* @api private |
|
*/ |
|
|
|
Store.prototype.createSession = function(req, sess, update){ |
|
var expires = sess.cookie.expires |
|
, orig = sess.cookie.originalMaxAge |
|
, update = null == update ? true : false; |
|
sess.cookie = new Cookie(sess.cookie); |
|
if ('string' == typeof expires) sess.cookie.expires = new Date(expires); |
|
sess.cookie.originalMaxAge = orig; |
|
req.session = new Session(req, sess); |
|
if (update) req.session.resetLastAccess(); |
|
return req.session; |
|
}; |