【问题标题】:Sessions Across Subdomains in ExpressExpress 中跨子域的会话
【发布时间】: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 键设置为任何内容。似乎会话正在子域之间重置。我该如何解决这个问题?

【问题讨论】:

    标签: node.js express subdomain session-cookies vhosts


    【解决方案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/');
          })
      

      【讨论】:

        猜你喜欢
        • 2014-09-25
        • 2014-05-10
        • 2011-10-27
        • 2017-11-22
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多