我在Express with Node中使用vhost功能来管理我的应用的多个子域。该应用程序使用相同的会话密钥和密钥,我相信我已经使用了正确的会话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键设置为任何内容。似乎会话正在子域之间重置。我该如何解决这个问题?
答案 0 :(得分:4)
一些想法:
尝试从.example.com
中删除句点。我的想法是,你正在尝试设置一个只有子域的cookie,同时仍然在根域。我已经读过example.com
上设置的Cookie也可以在所有子域中使用。
尝试不立即将用户重定向到子域,首先验证cookie是否在您的根域上运行。检查服务器的响应标头,然后查看您的浏览器是否在下一个请求中保留了cookie。只有当您确定这是正常工作时,才能导航到子域。
答案 1 :(得分:0)
使用.save()方法,回调将确保已设置cookie,然后重定向类似-
req.session.rep_id = rep._id;
req.session.save(()=>{
res.redirect('https://' + company.name + '.example.com/');
})