2013-04-18 61 views
2

我已將WebApi項目分成MVC項目(http://mydomain.com)和WebApi項目(http://api.mydomain.com)。WebApi和MVC在不同的項目中共享cookies?

我的MVC項目只是管理認證和服務的意見(使用knockoutJS和Ajax)。

我的問題是,要求從的WebAPI域(使用AJAX)信息時,從MVC項目中的cookie不會被髮送。或者說,在測試過程中,我在不同部分使用兩臺IIS Express服務器。

該項目將在稍後部署Azure,因此任何解決方案都必須在兩個網站之間運行。

那麼我怎樣才能讓這些cookies通過發送?或者我應該改用某種令牌來代替?

編輯

它的工作,直到我添加contentType$.ajax請求。然後我得到CORS預檢選項。我用我認爲正確的標題回答了200。如果我刪除該選項,我會再次收到所有Cookie的工作請求。

作品

$.ajax({ 
    url: "http://localhost:54304/Organization/", 
    type: "POST", 
    data: "$top=10", 
    xhrFields: { 
     withCredentials: true 
    }, 
    crossDomain: true, 
    success: function (data) { console.log(data); } 
}); 

不起作用:

$.ajax({ 
    url: "http://localhost:54304/Organization/", 
    contentType: 'application/json', //<--- this triggers preflight 
    type: "POST", 
    data: "$top=10", 
    xhrFields: { 
     withCredentials: true 
    }, 
    crossDomain: true, 
    success: function (data) { console.log(data); } 
}); 

現在是一個jQuery的 「功能」 或者是CORS是如何工作的?我應該設置什麼標題?我試着回覆:

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://localhost:51343 

回答

2

當您設置一個cookie時,您還可以設置cookie應該應用於哪個域名。
Cookie僅取決於域名(以及可選的路徑);而不是你有什麼樣的服務器。

對於您的情況,您可以將域設置爲.mydomain.com,這是一個通配符cookie,將發送到根域和所有子域。

+0

它也適用於不同的端口嗎?這是表單身份驗證Cookie – jgauffin

+0

Cookie始終在端口間工作。 (這可以說是一個設計缺陷) – SLaks

+0

這很奇怪,因爲我在Google Chrome中使用了開發工具,並且請求中沒有包含cookie。但我會檢查cookie域。 – jgauffin