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 中跨子域的会话的主要内容,如果未能解决你的问题,请参考以下文章