Express 中跨子域的会话

Posted

技术标签:

【中文标题】Express 中跨子域的会话【英文标题】:Sessions Across Subdomains in Express 【发布时间】:2012-08-04 18:19:51 【问题描述】:

我正在使用 Express with Node 中的虚拟主机功能来管理我的应用程序的多个子域。该应用使用相同的会话密钥和密钥,我相信我使用了正确的会话 cookie 设置:

cookie: 
          path     : '/',
          domain   : '.example.com',
          httpOnly : false,
          maxAge   : 1000*60*60*24*30*12    //one year(ish)
        

我在我的常规站点上设置了一个会话变量,其中子域未定义,例如http://example.com 像这样:

req.session.rep_id = rep._id;
res.redirect('https://' + company.name + '.example.com/');

但是当我将它们重定向到 subdomain.example.com 时,会话没有将 rep_id 键设置为任何内容。似乎会话正在子域之间重置。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

一些想法:

尝试从.example.com 中删除句点。我的想法是,您正在尝试设置仅子域的 cookie,同时仍在根域上。我已经读到example.com 上设置的 cookie 也将在所有子域上可用。

尝试不要立即将用户重定向到子域,以首先验证 cookie 是否在您的根域上工作。检查服务器的响应标头,然后查看浏览器是否在下一个请求中保留了 cookie。仅当您确定它工作正常时才导航到子域。

【讨论】:

【参考方案2】:

使用 .save() 方法,回调将确保设置 cookie 然后重定向类似的东西-

req.session.rep_id = rep._id;
    req.session.save(()=>
      res.redirect('https://' + company.name + '.example.com/');
    )

【讨论】:

以上是关于Express 中跨子域的会话的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 3 中跨多个子域删除会话 Cookie

Express.js 虚拟主机子域设置

Express CORS 子域

带有 vhost 和 greenlock-express 的 NodeJS 子域

在 Express 上为子域使用 VHOST

express - nodejs - 如果在子域中,则保留 URL 而不是重定向