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

Ale*_*yne 11 javascript ajax cors coffeescript ios

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

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

然而,当我通过移动Safari浏览器登录时,该cookie并没有得到发回后续请求.

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

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

我正在使用此代码段Zepto.js以确保withCredentials: true在XHR对象上正确设置.(原谅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
Run Code Online (Sandbox Code Playgroud)

并且该代码段在桌面浏览器中运行良好,在我添加之前,我无法在这些桌面浏览器中保留会话cookie.

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


编辑!

这是我的rails 2.3应用程序中的我的CORS标题设置,我相信相当标准的东西

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
Run Code Online (Sandbox Code Playgroud)

今天,Mountain Lion上的桌面Safari开始不发送cookie,表现得像MobileSafari一样.我不完全确定昨天我的评估是不准确的,还是苹果公司只是在拖我......

也可以通过https://远程网址使用来影响这个?

sch*_*san 2

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

我可以在 jsonp 请求的响应中设置 cookie 吗?