gpt4 book ai didi

javascript - MobileSafari 不会发回使用 CORS 设置的 Cookie

转载 作者:技术小花猫 更新时间:2023-10-29 10:53:53 24 4
gpt4 key购买 nike

我在 MobileSafari 中加载了一个页面,该页面通过 CORS 与另一台服务器通信。

在桌面浏览器(经过测试的 Chrome 和 Safari)中,我能够登录、获取 session cookie,并为后续请求发回该 session cookie,以便我可以通过所有 API 调用进行身份验证。

但是,当我通过 Mobile Safari 登录时,cookie 不会在后续请求中被发回。

我正在使用 Charles Proxy 监视正在发生的事情,它告诉我:

  1. POST https://myremoteserver.com/sessions.json 传递我的登录信息
  2. 成功并收到带有有效 Set-Cookie header 的响应。
  3. GET https://myremoteserver.com/checkout.json 被请求,没有 Cookie 请求 header 。
  4. 服务器的响应就好像我没有登录一样。

我将此代码段与 Zepto.js 一起使用,以确保在 XHR 对象上正确设置了 withCredentials: true。 (请原谅 CoffeeScript )

# Add withCredentials:true to the xhr object to send the remote server our cookies.
xhrFactory = $.ajaxSettings.xhr
$.ajaxSettings.xhr = ->
xhr = xhrFactory.apply(this, arguments)
xhr.withCredentials = yes
xhr

该代码段在桌面浏览器中运行良好,在我添加它之前,我无法在这些桌面浏览器中保留 session cookie。

MobileSafari 中是否有一些怪癖阻止它像桌面浏览器一样工作?为什么它的工作方式不同?


编辑!

这是我在 Rails 2.3 应用程序中设置的 CORS header ,我认为这是相当标准的东西

def add_cors_headers
if valid_cors_domain
headers['Access-Control-Allow-Origin'] = request.headers['HTTP_ORIGIN']
headers['Access-Control-Expose-Headers'] = 'ETag'
headers['Access-Control-Allow-Methods'] = 'GET, POST, PATCH, PUT, DELETE, OPTIONS, HEAD'
headers['Access-Control-Allow-Headers'] = '*,x-requested-with,Content-Type,If-Modified-Since,If-None-Match'
headers['Access-Control-Allow-Credentials'] = 'true'
headers['Access-Control-Max-Age'] = '86400'
end
end

同样,今天 Mountain Lion 上的桌面 Safari 开始不发送 cookie,其行为与 MobileSafari 一样。我不完全确定我昨天的评估是否不准确,或者 Apple 只是在耍我......

在远程 url 上使用 https:// 也会影响到这一点吗?

最佳答案

我不知道这个解决方案是否可行或是否可以被您接受,但我在移动 Safari 和 JSONP 应用程序中遇到了同样的问题。似乎 Safari 并未设置为接受第三方 cookie。我转到“设置”>“Safari”>“接受 Cookie”并设置“始终”,问题就消失了。祝你好运。

Can I set cookies in a response from a jsonp request?

关于javascript - MobileSafari 不会发回使用 CORS 设置的 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14206531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com