从子域A为子域B设置cookie

时间:2017-09-27 22:11:31

标签: jquery http nginx cookies cors

来自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标头:

  • 。我-site.com
  • 没有域名精确(期望端点域: subdomain-b.my-site.com

观察:

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

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

约束: 我知道有一个替代解决方案,比如谷歌分析用于设置cookie(它调用服务然后从页面中的嵌入式JS设置cookie),但我们有很多前端应用程序,无法更新它们来做这个技巧。我们的解决方案是使用nginx。

1 个答案:

答案 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}