3 * Connect - session - Store
4 * Copyright(c) 2010 Sencha Inc.
5 * Copyright(c) 2011 TJ Holowaychuk
10 * Module dependencies.
13 var EventEmitter = require('events').EventEmitter
14 , Session = require('./session')
15 , Cookie = require('./cookie');
18 * Initialize abstract `Store`.
23 var Store = module.exports = function Store(options){};
26 * Inherit from `EventEmitter.prototype`.
29 Store.prototype.__proto__ = EventEmitter.prototype;
32 * Re-generate the given requests's session.
34 * @param {IncomingRequest} req
35 * @return {Function} fn
39 Store.prototype.regenerate = function(req, fn){
41 this.destroy(req.sessionID, function(err){
48 * Load a `Session` instance via the given `sid`
49 * and invoke the callback `fn(err, sess)`.
52 * @param {Function} fn
56 Store.prototype.load = function(sid, fn){
58 this.get(sid, function(err, sess){
59 if (err) return fn(err);
60 if (!sess) return fn();
61 var req = { sessionID: sid, sessionStore: self };
62 sess = self.createSession(req, sess);
68 * Create session from JSON `sess` data.
70 * @param {IncomingRequest} req
71 * @param {Object} sess
76 Store.prototype.createSession = function(req, sess){
77 var expires = sess.cookie.expires
78 , orig = sess.cookie.originalMaxAge;
79 sess.cookie = new Cookie(sess.cookie);
80 if ('string' == typeof expires) sess.cookie.expires = new Date(expires);
81 sess.cookie.originalMaxAge = orig;
82 req.session = new Session(req, sess);