2012-05-25 74 views
1

爲了更好地說明我的問題,問題可能是:我可以在來自jsonp請求的響應中設置cookie嗎?

我可以從JSONP請求發起會話嗎?

更詳細地說:假設一個JSONP請求是從我的瀏覽器到myserver.com。 myserver.com是否可以通過JSONP響應來設置cookie,以便稍後當再次向myserver.com發出請求時(直接在doc.host = myserver.com或通過來自任意doc.host的另一個JSONP請求間接)時, cookies會被髮送給它?目前瀏覽器似乎忽略了我使用JSONP響應發送的Cookie。 是我想要的嗎?我在這裏錯過了什麼?

編輯:這是我做的,通過加載本地JS文件通過一個虛擬的本地HTML,只是獲取最新的jQuery和加載js文件的要求:

$.ajax({ 
    url: "http://my-remote-server/jsonp/service/test", 
    dataType: 'jsonp', 
    data: {some:'data'}, 
    success: function(responseData) 
      {console.log(responseData);} 
    }); 

上述JSONP請求的響應,正在設置一個cookie。自chrome報告以來,這一點已得到證實。 問題是,如果我再次重新執行上述操作,則先前設置的cookie不會被髮送回服務器。編輯2:我去了Chrome瀏覽器(在引擎蓋下的頁面),我找不到cookie,雖然它被報告(調試控制檯的鉻)在JSONP響應收到。這意味着服務器發送它,瀏覽器看到它,然後拋棄它。

回答

3

我找到了解決辦法,這裏是一些信息,可能是任何人處理這個問題有意思:

維基百科的定義:

第三方Cookie是cookies被設置不同域名顯示在地址欄上

如果我沒有錯,這會使99.99%的所有JSONP設置Cookie,第三方Cookie。在我的情況下,地址欄上顯示的地址是文件://,這使我的Cookie成爲第三方。

只要我啓用了第三方cookie,它就可以工作。作爲便箋,默認情況下Chrome不支持文件中的cookie://頁面和doean不會警告或通知此設置。它造成了一些麻煩。詳見herehere

+0

我在移動Safari中遇到了這個問題。去偏好設置'接受Cookies'爲'總是'解決了它。 – schellsan

1

是的。所以可以動態圖像請求和CSS請求等。如果它是一個XHR請求,你甚至可以讀取響應頭(Set-Cookie等)。

現在如何忽略cookie?你怎麼知道?

+0

我做了一個JSONP請求,服務器在響應中設置了cookie,然後我轉到另一個瀏覽器窗口並直接轉到地址,並且服務器沒有獲取cookie。我使用chrome,並且看到服務器在JSONP響應中設置的cookie,但是cookie不會從第二個直接請求發送到服務器。第一個請求(JSONP)使用最新的jquery .ajax funcall完成。第二個只是在瀏覽器窗口中輸入。也許我沒有看到什麼。 – Paralife

+0

如果它是JSONP,它被包含爲一個JS文件,對吧? (不是XHR?)所以你可以檢查請求和響應頭。這個對我有用。頁面A發送JS(ONP)請求給腳本B,腳本B以JSONP + Set-cookie響應,如果我重新加載頁面A,cookie發送到服務器。這就是Cookie(應該)的工作方式......檢查響應以查看cookie是否實際設置。從新會話開始(使用隱身模式)。 – Rudie

+0

實際上,它是一個名爲test.html的本地文件,它只包含頭標記(和最新的jquery)中的test.js腳本。在這個test.js文件中,我有一個函數向我的遠程服務器發出一個JSONP請求。我可以在Chrome控制檯中看到響應cookie。但如果我再次提出請求,則不會發送。 – Paralife

相關問題