2011-07-04 130 views
12

我的CORS正在處理當前的項目,儘管我無法正確工作的一件事是cookie。Jquery Ajax CORS + HttpOnly Cookie

現在我得到的cookie很好,服務器發出它併發送它並且firefox接受它,我可以在firebug cookie部分看到它。然而,當我進行後續調用該服務的它似乎沒有發送cookie的頭......

GET /some/entity/ HTTP/1.1 
Host: localhost:1837 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0 
Accept: */* 
Accept-Language: en-gb,en;q=0.5 
Accept-Encoding: gzip, deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Connection: keep-alive 
Referer: http://localhost:6879 
Origin: http://localhost:6879 

我需要做什麼特別的事情與我的AJAX調用?

var ajaxOptions = { 
    url: serviceResourceUrl, 
    type: "get", 
    dataType: "json", 
    success: successCallback, 
    error: failedCallback, 
    xhrFields: { withCredentials: true } 
}; 

$.ajax(ajaxOptions); 

回答

9

嘗試使用beforeSend屬性而不是xhrFields。你的情況:

var ajaxOptions = { 
    url: serviceResourceUrl, 
    type: "get", 
    dataType: "json", 
    success: successCallback, 
    error: failedCallback, 
    beforeSend: function(xhr){ 
     xhr.withCredentials = true; 
    } 
}; 

$.ajax(ajaxOptions); 

您可以在這裏瞭解更多:Sending credentials with cross-domain posts?

+1

我本來想這樣做的,但它wouldnt在所有的工作。在xhrFields上看到一個帖子:{...},它爲我找回了cookie。將再次嘗試另一種方法。 – somemvcperson

+0

剛剛嘗試過,仍然沒有運氣。該cookie可以在螢火蟲中看到,它具有正確的過期和域。在服務器上進行調試時,沒有cookies :( – somemvcperson

+0

對不起所有的註釋,但只是雙重檢查了域,並在螢火蟲它報告localhost(這是部分正確),但開發中的服務實際上是在localhost:1873。我嘗試編輯cookie並將該域放入,它只是忽略它,似乎只保留本地。服務器似乎設置它正確...所以這可能是一個與Firefox的錯誤? – somemvcperson