Ale*_*yne 11 javascript ajax cors coffeescript ios
我在MobileSafari中加载了一个页面,它通过CORS与另一台服务器通信.
在桌面浏览器(经过测试的Chrome和Safari)中,我可以登录,获取会话cookie,并将该会话cookie发回给后续请求,以便我可以通过所有API调用进行身份验证.
然而,当我通过移动Safari浏览器登录时,该cookie并没有得到发回后续请求.
我正在使用Charles Proxy监视正在发生的事情,它告诉我:
POST https://myremoteserver.com/sessions.json 传递我的登录信息Set-Cookie标头的响应.GET https://myremoteserver.com/checkout.json请求,没有Cookie请求标头.我正在使用此代码段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://远程网址使用来影响这个?
我不知道这个解决方案是否有效或是否可以被您接受,但我在移动 Safari 和 JSONP 应用程序上遇到了同样的问题。Safari 似乎未设置为接受第三方 cookie。我进入“设置”>“Safari”>“接受 Cookie”并设置“始终”,问题就消失了。祝你好运。
| 归档时间: |
|
| 查看次数: |
4295 次 |
| 最近记录: |