2012-04-13 111 views
4

我將API的客戶端庫從JSONP移植到CORS。 我已經在服務器中設置了所有正確的標題,並完成了客戶端中所有指示的事情,但是我有關於cookie的問題。 API驗證方法適用於Cookie。使用JSONP,它以API密鑰作爲參數向API發出GET請求。然後,服務器在api.io.holalabs.com(API URL)上設置一個cookie,因此下次它調用API時,服務器將請求cookie並進行登錄。 問題是,儘管我在頭文件中看到了Set-Cookie,但cookie並未在api.io.holalabs.com上設置,因此登錄失敗。 這些都是我的頭:通過CORS請求設置cookie

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version 
Access-Control-Allow-Methods:GET 
Access-Control-Allow-Origin:http://holalabs.com 
Access-Control-Expose-Headers:X-Api-Version, X-Request-Id, X-Response-Time 
Connection:close 
Content-Length:13 
Content-MD5:RjkY1fW5i5MKifxPk+r4tg== 
Content-Type:application/json 
Date:Fri, 13 Apr 2012 16:06:56 GMT 
Server:nginx/1.0.14 
Set-Cookie:apikey.sig=DYyrzLFUfJSjsmK5crkxHQg-rxQ; path=/; httponly 
X-Api-Version:1.0.0 
X-Request-Id:c78b4223-1caf-42db-a99e-b075bdc10ea5 
X-Response-Time:2 

編輯:一個API的使用Cookie是一個可怕的想法,所以我們現在用一個頭要權威性的用戶。發佈已關閉!

+1

您使用了什麼標題? '認證:基地....'? – pabera 2012-08-22 09:22:41

回答

0

問題是理應關閉,但如果有人遇到這個問題,需要使用cookies,這裏有一個可能的解釋和解決方案:

說明

會話ID被作爲一個cookie,並自該請求是跨域的,它被瀏覽器視爲第三方cookie。幾個瀏覽器將阻止第三方cookie,並且會話丟失。

生成客戶端上的會話ID(在瀏覽器中),使用JavaScript的sessionStorage存儲會話ID,然後用每個請求向服務器發送的會話ID。

(細節:Javascript Cross-Domain Request With Session