在多个dynos heroku应用程序上设置快速应用程序的会话

我已经使用express(node.js)+ mongodb在单个Heroku dyno上实现了一些用户authentication,一切工作正常。 然而,当我增加dynos的数量(超过1),我无法login,我一直在我的login页面redirect,这意味着我的会议尚未设置。 这是我的代码:

checkCookies = function(req,res,next){

if(req.session.user){ res.locals.user = req.session.user; next(); } else{ res.redirect('/login'); } }; app.use(express.cookieParser()); app.use(express.session({ secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK', cookie: {httpOnly: true, maxAge:14*24*60*60*1000} })); 

使用mongodb处理express / node.js上共享会话的最佳解决scheme是什么?

connect-mongo应该满足你的需求: https : //github.com/kcbanner/connect-mongo

使用连接mongo模块与快递。

 var http = require('http'), express = require('express'), session = require('connect-mongo')(express) 

然后在你的员工安装会议上进行外部存储。 下面的代码将使用来自mongo,cookie和额外头的会话,以允许跨域和jsonp。

 app.configure(function() { app.use(express.cookieParser()); app.use(express.session({ store: new session({ db: 'sessions' }), secret: 'yoursecret', cookie: { path: '/', maxAge: 1000 * 60 * 60 * 24 // 1 day } })); app.use(function(req, res, next) { res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Origin', req.headers.origin); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'); next(); }); app.set('jsonp callback', true); }); 

上面的答案是误导,因为它们暗示你不能在Heroku上的多个dynos上共享基于cookie的会话。

如果我使用cookie会话而不是快速 会话 ,我可以跨多个dynos使用基于cookie 的会话 。 在这个线程的第一篇文章中缺less的是秘密值不被传递给cookieparsing器。 这意味着每当进程重新启动或新的testing仪启动时,节点将为parsing器分配一个随机哈希。

做以下工作对我来说:

 app.use(express.cookieParser('0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK')); app.use(express.session({ secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK', cookie: {httpOnly: true, maxAge:14*24*60*60*1000} }));