multi-process-session
Version:
manage multi process session
80 lines (74 loc) • 2.32 kB
JavaScript
// Generated by CoffeeScript 2.3.1
(function() {
/*
Created by massimo on 2014/4/14.
*/
var Session, _, sessionHelper;
_ = require("underscore");
sessionHelper = require('./sessionHelper');
Session = require('./session');
/*
session middleware
@param {Object} options
@param {String} [options.type="cookie"] session type: cookie or token
@param {Number} [options.expire=604800] expire seconds
@param {Boolean} [options.refresh=true] refresh every time
@param {String} [options.secret="guess me if you can"] secret for generate session id
@param {Object} [options.redisOptions] options to create redis client
*/
module.exports = function(options) {
var defaultOptions;
defaultOptions = {
type: "cookie",
expire: 604800,
refresh: true, // auto refresh cookie
secret: 'guess me if you can',
redisOptions: {
host: '127.0.0.1',
port: 6379
}
};
options = _.extend(defaultOptions, options);
return function(req, res, next) {
var SESSION_ID, session, sid;
sid = "";
if (options.type === "cookie") { // is browser
SESSION_ID = "sid";
//cookie
if (req.cookies) {
sid = req.cookies[SESSION_ID];
if (!sid) {
sid = sessionHelper.genSID(options.secret);
res.cookie(SESSION_ID, sid, { // save cookie
maxAge: options.expire * 1000
});
} else if (options.refresh) {
res.cookie(SESSION_ID, sid, { // save cookie
maxAge: options.expire * 1000
});
}
} else {
throw new Error("no cookie support"); // is api
}
} else {
sid = req.query.Token || sessionHelper.genSID(options.secret);
}
res.on("finish", function() {
return res.session && res.session.save(options.expire, function(err) {
if (err) {
return console.error(err);
}
});
});
return session = new Session(sid, options.redisOptions, function(err) {
if (err) {
console.error(err);
return next(err);
} else {
req.session = res.session = session;
return next();
}
});
};
};
}).call(this);