在Express中跨子域共享会话

11
我正在使用Node中的Express框架的虚拟主机(vhost)功能来管理应用程序的多个子域名。该应用程序使用相同的会话(secret和key),我相信我已经正确地设置了会话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键设置为任何内容。似乎会话在子域之间被重置了。我该如何解决这个问题?

2个回答

5

一些想法:

尝试从.example.com中去掉句号。我的想法是,您正在尝试设置仅在子域中使用的cookie,同时仍位于根域中。我已经阅读过,在example.com上设置的cookie也将在所有子域中可用。

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


1
使用.save()方法,回调函数将确保设置cookie,然后重定向到类似以下内容的页面-
req.session.rep_id = rep._id;
    req.session.save(()=>{
      res.redirect('https://' + company.name + '.example.com/');
    })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接