如何使用Express在端口/域之间共享cookie

我有两个node.js(express)应用程序运行在两个不同的端口上。 一个在localhost:3000上运行,另一个在localhost:4000运行。 端口3000上的应用程序具有以下cookieconfiguration:

 app.use(express.cookieParser()) app.use(express.session({ key: settings.session.key, secret: settings.session.secret, cookie: settings.session.cookie, fingerprint: function () { return '' }, store: new MemoryStore() })) 

另一个应用程序(端口4000 )有:

 app.use(express.cookieParser()) app.use(express.session({ key: settings.session.key, secret: settings.session.secret, cookie: settings.session.cookie, fingerprint: function() { return '' }, store: new MongoSessionStore({ db: db }) })) 

他们都使用相同的会话configuration对象(唯一不同的是一个正在存储在MongoDB中,而另一个是在内存中。

我设置了一个类似于localhost:3000的cookie:

 res.cookie('mycookie', 'bar', { domain: 'localhost:4000' }) 

然后我POST(与jquery.ajax)到localhost:4000上的路由,而cookie mycookie不存在。

注意:我在localhost:4000上安装了CORS设置,以接受origin localhost:3000 ,当我用xhrFields: { withCredentials: true }发布时,我使用xhrFields: { withCredentials: true }

所以我的问题是,如何正确地configuration应用程序设置cookie到另一个? 🙂

我build议你在两个应用程序之间共享你的会话存储。

编辑:只是为了澄清你不能从一个域设置cookie到另一个域。 所以domainA不能为domainB设置一个cookie – 你必须得到domainB来设置cookie(例如通过访问domainB )。 使用您当前的configuration,您应该能够按预期阅读cookie。

最初,我以为你想通过cookie分享两个应用程序之间的状态,这就是为什么我build议在应用程序之间共享会话存储。