我目前在两个不同的端口上运行两个单独的节点应用程序,但是共享同一个后端数据存储。我需要在两个应用程序之间共享用户会话,以便当用户通过一个应用程序登录时,他们的会话可用,并且他们似乎登录了另一个应用程序。在这种情况下,它是面向公众的网站和管理后端。
我们的设置如下:
两个应用程序的会话内容(和redis)配置相同:
session: { options: { secret: "my secret", cookie: { domain: "mydomain.com", maxAge:1000*60*60*24 } }, redis: { host: 'my host', maxAge: 86400000, secret: "my secret" } }
app.js中会话内容的配置如下所示:
if ( app.settings.env === "production" ) { session.options.store = new RedisStore(session.redis); } app.use(express.session(session.options)); app.use(passport.initialize()); app.use(passport.session({ secret: 'a different secret' }));
我希望它能做什么 :允许我们在两个应用程序之间的cookie中看到相同的会话ID。
所以我的问题是 :如何设置快递,Redis和护照,以便可以在不同子域之间共享会话?
也许有些过时,但是在此时,Express-session可以识别cookie的域选项。根据消息来源:
function session(options){ var options = options || {} // name - previously "options.key" , name = options.name || options.key || 'connect.sid' , store = options.store || new MemoryStore , cookie = options.cookie || {} ...
这是用于设置cookie的:
var Cookie = module.exports = function Cookie(options) { this.path = '/'; this.maxAge = null; this.httpOnly = true; if (options) merge(this, options); ...
因此,类似的方法适用于当前的1.10.1 master:
secret: "my secret", cookie: { domain: "mydomain.com",