来自http://subdomain-a.my-site.com:3000
,我对http://subdomain-b.my-site.com
进行跨域XHR(ajax)调用。
我的jQuery客户端具有以下设置(用于测试目的):
crossDomain = true
- >申请其他域名withCredentials = true
- >用于接受来自ajax调用的Set-Cookie
标头Nginx服务器已配置为在响应中添加以下标头:
Access-Control-Allow-Origin: http://subdomain-a.my-site.com:3000
Access-Control-Allow-Credentials: true
HTTP响应还包含一些带有以下域的Set-Cookie
标头:
观察:
chrome://settings/content/cookies
,并且subdomain-a
或subdomain-b
的Cookie设置为零。问题=>我想做一些可能或不可能的事吗?如果有可能,我是否错过了一些配置?
约束: 我知道有一个替代解决方案,比如谷歌分析用于设置cookie(它调用服务然后从页面中的嵌入式JS设置cookie),但我们有很多前端应用程序,无法更新它们来做这个技巧。我们的解决方案是使用nginx。
答案 0 :(得分:1)
可能。我错过了以下配置:
withCredentials = true
错误,xhrFields: {withCredentials: true}
是解决方案。
关于HTTP响应,我们有以下Set-Cookie
标题:
Set-Cookie: authtoken=value; Path=/; HttpOnly
Set-Cookie: authtoken=value; Domain=.my-site.com; Path=/; HttpOnly
现在,如果您转到 subdomain-b.my-site.com 并打开Cookie标签,您会看到带有子域名-b的authtoken
Cookie .my-site.com 域名。这是使用Chrome,Firefox和Safari进行测试的。
注意:
crossDomain = true
是不必要的,因为我们的XHR HTTP响应返回Access-Control-Allow-Origin: http://subdomain-a.my-site.com:3000
。但jQuery必须使用xhrFields: {withCredentials: true}
。