2010-05-13 155 views
31

我有一個Web服務,我從腳本調用但不需要存儲在cookie中的任何信息。每當我向服務提出請求時,cookie都會隨之發送。據我所知,默認Cookie是通過HTTP請求發送的,但是有什麼辦法可以覆蓋該行爲並且不發送cookie?防止Cookies發送AJAX請求

概括地說,我發出了我的要求是這樣的:

$.ajax({ 
    type: "POST", 
    cache: false, 
    url: url, 
    data: data, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(response) { successFunc(response); }, 
    error: function(xhr) { errorFunc(xhr); } 
}); 

回答

0

你是正確地說,瀏覽器送匹配(路徑+域名+會話)的cookie與HTTP請求一起。這對於Cookie機制起作用至關重要。

難道你不能簡單地不讀取餅乾?

此外,當cookie最初設置時,您可以設置哪個目錄(及其子目錄)可以訪問cookie。

例如,如果您將cookie設置爲僅在/ foo/bar /中讀取,位於/whatever/ajaxHandler.php中的文件將無法看到這些cookie。

檢查了這一點:http://us.php.net/setcookie

雖然我不知道,如果你使用PHP,它可能是你一個很好的起點。

+5

忽略cookie並不能解決它消耗帶寬的問題 – Osseta 2010-05-14 04:09:55

+1

Foxtrot,我很好奇你的意思是「根本不讀取cookie」。另外,要設置特定目錄的角度來觸及你的角度,是可以爲整個範圍設置一個cookie,但是某個目錄?如果是這樣,我相信這會給我一些工作。請記住,這一切都發生在同一個域中,並且需要通過該域中的路徑進行區分。我不知道cookie可以解決這個問題。 是否有人知道jQuery本身是否允許不向cookie發送AJAX請求?這對我來說是最終的解決方案。 =] – Simon 2010-05-15 17:01:10

+1

人們並不總是可以選擇不讀取cookie,例如,在視圖代碼運行之前,通過框架上的cookie處理授權時。 – 2014-07-08 06:44:05

15

將AJAX請求發送到服務器上無cookie的子域。所以你的應用程序是www.mydomain.com,而ajax請求是從api.mydomain.com提供的,你從來沒有設置cookie。另外一個偉大的想法,這樣做與像圖片等靜態文件...

看到「使用Cookie的免費域名的組件」的http://developer.yahoo.com/performance/rules.html

+0

奧塞塔,非常好的電話無Cookie域。我們目前正在爲其他資源執行此操作,例如幾乎所有的靜態文件。 我需要詳細闡述一下這個Web服務。它不是獨立的,並且包含在一個子目錄中,所以爲了這個討論,我說我在同一個域中調用方法,我的web應用程序在但是在子路徑「/publicservices/service.asmx」中。 – Simon 2010-05-15 17:07:24

+0

我並不確定,但我認爲cookie是每個(子)域的全局配置。因此,它們可以打開或關閉,並且不能根據每個請求進行配置。 – Osseta 2010-05-18 06:40:32

+0

不幸的是,我確信你是對的。非常感謝您的洞察! – Simon 2010-05-18 15:51:03

1

部分沒有,該cookie將始終發送。

您可以如何將cookie發送到瀏覽器,並使用http標誌,這意味着它們不會通過javascript發送。

或(許多網站使用),創建一個新的子域,你永遠不會發送任何cookie。

6

另一種方法是之前做$阿賈克斯:
1.從瀏覽器的cookie爲您的域使用JavaScript(它們保存在一個全局變量)
2.刪除cookies與JavaScript的域從瀏覽器
3.執行$ .ajax調用
4.將cookies(來自全局變量)放回到瀏覽器中。

如果你根本不需要來自你的域的cookies只是刪除它們(所以跳過1.和4.)。

+0

如果我只能給你1000個upvotes ... – 2015-11-14 23:41:19

+0

幾乎完美...因爲沒有辦法恢復cookie的生活。 – 2016-11-10 05:00:59

0

需要withCredentials標誌來實際發送帶有交叉源ajax調用的cookie。

請參見:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

它設置爲false將阻止cookie的發送。

對於同源請求,您需要遵循此處提及的其他解答。

+0

你如何協調這一點? _設置withCredentials對同一站點請求沒有影響。雖然在我七年前的原始問題中不明顯,但這個.NET服務嵌入在網站中(在嵌套在站點中的文件夾中的_.asmx_服務) 。 – Simon 2017-02-08 21:01:44

+0

夠公平的。我將明確指出,withCredentials = false可防止僅在跨源請求上發送cookie。 – 2017-02-09 21:40:30