【问题标题】:Setting cookies through a CORS request通过 CORS 请求设置 cookie
【发布时间】:2012-04-26 00:51:05
【问题描述】:

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

【问题讨论】:

  • 你用了什么标题? Authentication: Base ....?

标签: ajax cookies cross-domain


【解决方案1】:

问题应该已经解决了,但是如果有人遇到这个问题并且需要使用cookies,这里有一个可能的解释和解决方案:

说明

会话 ID 作为 cookie 发送,由于请求是跨域的,因此被浏览器视为第三方 cookie。多个浏览器会阻止第三方 cookie,从而导致会话丢失。

解决方案

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

(详情:Javascript Cross-Domain Request With Session

【讨论】:

    猜你喜欢
    • 2019-03-04
    • 2016-07-21
    • 2012-12-22
    • 1970-01-01
    • 2021-12-18
    • 2012-10-11
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    相关资源
    最近更新 更多