2017-09-27 127 views
0

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」響應 –

回答

0

這是可能的。我錯過了以下配置:

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必需的。