从子域A设置Cookie,子域B

问题描述:

http://subdomain-a.my-site.com:3000,我做了一个跨域XHR(ajax)调用http://subdomain-b.my-site.com从子域A设置Cookie,子域B

我的jQuery的客户端有以下设置(用于测试目的):

  • crossDomain = true - >请求其他域
  • withCredentials = true - >从阿贾克斯接受Set-Cookie头调用

的Nginx服务器已配置为在响应中添加以下标头:

Access-Control-Allow-Origin: http://subdomain-a.my-site.com:3000 
Access-Control-Allow-Credentials: true 

HTTP响应还包含一些Set-Cookie头具有以下结构域:

  • 。我-site.com
  • 没有域一种高精度(期望端点域:子域-b.my- site.com

观察:

  • Chrome的控制台不显示此配置的CORS问题。
  • 收到HTTP响应后,我去了chrome://settings/content/cookies,并且有零饼干设置为subdomain-asubdomain-b

问题=>我是否想做一些可能或不可能的事情?如果可能的话,我错过了一些配置吗?

约束: 我知道有一个替代的解决方案,如谷歌Analytics(分析)不设置的cookie(它调用一个服务,然后设置在您的网页上嵌入JS饼干),但我们有很多正面的应用程序并不能更新他们来做这个伎俩。我们的解决方案是使用nginx。

+1

无法在子域中设置Cookie。一个页面只能在其自己的域或父项中设置Cookie。 – Barmar

+0

在浏览器网络工具中显示什么是“Set-Cookie”响应 –

这是可能的。我错过了以下配置:

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的选项卡,你会看到一个authtoken Cookie与子域名bb.my-site.com域名。这已经过Chrome,Firefox和Safari的测试。

注意: crossDomain = true是不必要的,因为我们的XHR HTTP响应返回Access-Control-Allow-Origin: http://subdomain-a.my-site.com:3000。但xhrFields: {withCredentials: true}是jQuery必需的。