4

我正在将 API 的客户端库从 JSONP 移植到 CORS。我已经在服务器中设置了所有正确的标头并在客户端中完成了所有指示的事情,但是我遇到了关于 cookie 的问题。该 API 身份验证方法适用于 cookie。使用 JSONP,它使用 API 密钥作为参数向 API 发出 GET 请求。然后服务器在 api.io.holalabs.com(API URL)设置一个 cookie,所以下次它调用 API 时,服务器会请求 cookie 并进行登录。问题是,虽然我在标题中看到了 Set-Cookie,但 api.io.holalabs.com 上没有设置 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 是一个可怕的想法,所以现在我们使用标头来验证用户。问题已关闭!

4

1 回答 1

0

问题应该已关闭,但如果有人遇到此问题并需要使用 cookie,这里有一个可能的解释和解决方案:

解释

会话 ID 作为 cookie 发送,并且由于请求是跨域的,因此被浏览器视为第三方 cookie。一些浏览器会阻止第三方 cookie,并且会话会丢失。

解决方案

在客户端(在浏览器中)生成会话 ID,使用 Javascript sessionStorage 存储会话 ID,然后将会话 ID 与每个请求一起发送到服务器。

(详情:带有会话的 Javascript 跨域请求

于 2014-12-18T08:31:49.150 回答