2012-04-13 119 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