ajax - 通过 CORS 请求设置 cookie

标签 ajax cookies cross-domain

我正在将 API 的客户端库从 JSONP 移植到 CORS。
我已经在服务器中设置了所有正确的 header 并在客户端中完成了所有指示的事情,但是我有关于 cookie 的问题。
该 API 身份验证方法适用于 cookie。使用 JSONP,它以 API key 作为参数向 API 发出 GET 请求。然后服务器在 api.io.holalabs.com(API URL)设置一个 cookie,所以下次它调用 API 时,服务器请求 cookie 并进行登录。
问题是,尽管我在标题中看到了 Set-Cookie,但 cookie 并未在 api.io.holalabs.com 上设置,因此登录失败。
这些是我的标题:

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 是一个可怕的想法,所以现在我们使用 header 来验证用户。问题已关闭!

最佳答案

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

说明

session ID 作为 cookie 发送,并且由于请求是跨域的,因此浏览器会将其视为第三方 cookie。一些浏览器会阻止第三方 cookie,从而导致 session 丢失。

解决方案

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

(详情:Javascript Cross-Domain Request With Session)

关于ajax - 通过 CORS 请求设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144521/

相关文章:

java - 如何在 Android 和/或 Java 中使用 HttpClient 管理 cookie?

c# - WCF wsHttpBindingwith silverlight 中的跨域错误

python - 将 requests.Session() cookie 传输到 Python 中的 selenium 网络驱动程序

ruby-on-rails - RESTful 身份验证 : Stumped trying to do simple redirect on cookie based authentication

wcf - 跨域请求被阻止原因 : CORS preflight channel did not succeed

firefox - Firefox 更新后的中文跨域 XmlHTTPRequest

java - 限制从 URL 栏访问 DWR(Easy Ajax for Java)

jquery - 链接 Ajax URL 的正确方法

ASP.NET session 状态提供程序

php - 需要修复文件上传后停止页面重新加载的问题