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

时间:2013-09-11 18:54:33

标签: javascript node.js cookies express

我有两个在两个不同端口上运行的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设置为彼此? :)

1 个答案:

答案 0 :(得分:1)

我建议您在两个应用之间共享会话存储。

编辑:只是为了澄清您无法将Cookie从一个域设置为另一个域。因此 domainA 无法为 domainB 设置Cookie - 您必须获取 domainB 才能设置Cookie(例如访问即domainB )。使用您当前的配置,您应该能够按预期读取cookie。

最初,我以为你想通过cookies在两个应用程序之间共享状态,这就是我建议在应用程序之间共享会话存储的原因。