我有两个在两个不同端口上运行的node.js(express)应用程序。一个在localhost:3000
上运行,另一个在localhost:4000
上运行。端口3000
上的应用程序具有以下cookie配置:
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()
}))
另一个app(在端口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 })
}))
它们都使用相同的会话配置对象(唯一的区别是一个存储在MongoDB中,而另一个存储在内存中。
我在localhost:3000
上设置了一个像这样的cookie:
res.cookie('mycookie', 'bar', { domain: 'localhost:4000' })
然后我将POST(使用jquery.ajax)发送到localhost:4000
上的路由,并且cookie mycookie
不存在。
注意:我在localhost:4000
上设置了CORS以接受来源localhost:3000
,当我使用Jquery发帖时,我使用xhrFields: { withCredentials: true }
。
所以我的问题是,如何正确配置应用程序以将cookie设置为彼此? :)
答案 0 :(得分:1)
我建议您在两个应用之间共享会话存储。
编辑:只是为了澄清您无法将Cookie从一个域设置为另一个域。因此 domainA 无法为 domainB 设置Cookie - 您必须获取 domainB 才能设置Cookie(例如访问即domainB 强>)。使用您当前的配置,您应该能够按预期读取cookie。
最初,我以为你想通过cookies在两个应用程序之间共享状态,这就是我建议在应用程序之间共享会话存储的原因。