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')
16 , utils = require('../../utils');
19 * Initialize abstract `Store`.
24 var Store = module.exports = function Store(options){};
27 * Inherit from `EventEmitter.prototype`.
30 Store.prototype.__proto__ = EventEmitter.prototype;
33 * Re-generate the given requests's session.
35 * @param {IncomingRequest} req
36 * @return {Function} fn
40 Store.prototype.regenerate = function(req, fn){
42 this.destroy(req.sessionID, function(err){
49 * Load a `Session` instance via the given `sid`
50 * and invoke the callback `fn(err, sess)`.
53 * @param {Function} fn
57 Store.prototype.load = function(sid, fn){
59 this.get(sid, function(err, sess){
60 if (err) return fn(err);
61 if (!sess) return fn();
62 var req = { sessionID: sid, sessionStore: self };
63 sess = self.createSession(req, sess);
69 * Create session from JSON `sess` data.
71 * @param {IncomingRequest} req
72 * @param {Object} sess
77 Store.prototype.createSession = function(req, sess){
78 var expires = sess.cookie.expires
79 , orig = sess.cookie.originalMaxAge
80 , update = null == update ? true : false;
81 sess.cookie = new Cookie(sess.cookie);
82 if ('string' == typeof expires) sess.cookie.expires = new Date(expires);
83 sess.cookie.originalMaxAge = orig;
84 req.session = new Session(req, sess);