【问题标题】:How to share cookies across ports/domains with Express如何使用 Express 跨端口/域共享 cookie
【发布时间】:2013-09-15 22:38:46
【问题描述】:

我有两个 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()
}))

另一个应用程序(在端口 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? :)

【问题讨论】:

  • 如果您对两个站点使用相同的 mongo 会话存储会怎样?
  • @JoshC。它会导致两个应用程序之间共享会话。

标签: javascript node.js cookies express


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2011-11-27
    • 2017-01-02
    • 2018-08-27
    • 1970-01-01
    • 2013-02-13
    • 2013-11-24
    • 2020-01-13
    相关资源
    最近更新 更多