MobileSafari 不会发回使用 CORS 设置的 Cookie
本教程将介绍MobileSafari 不会发回使用 CORS 设置的 Cookie的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。
问题描述
我在 MobileSafari 中加载了一个页面,该页面通过 CORS 与另一台服务器通信.
在桌面浏览器(经过测试的 Chrome 和 Safari)中,我能够登录,获取会话 cookie,并将该会话 cookie 发回以供后续请求,以便我可以通过所有 API 调用进行身份验证.
但是,当我通过 Mobile Safari 登录时,cookie 在后续请求中被发回.
我正在使用 Charles Proxy 监视正在发生的事情,它告诉我:
POST https://myremoteserver.com/sessions.json
传递我的登录信息
成功并收到带有有效 Set-Cookie
标头的响应.
GET https://myremoteserver.com/checkout.json
被请求,没有 Cookie
请求标头.
服务器响应好像我没有登录一样.
POST https://myremoteserver.com/sessions.json
passes up my login info
It succeeds and response is received with a valid Set-Cookie
header.
GET https://myremoteserver.com/checkout.json
is requested, without a Cookie
request header.
Server responds as if I am not logged in.
我将此代码段与 Zepto.js
一起使用,以确保在 XHR 对象上正确设置了 withCredentials: true
.(请原谅咖啡脚本)
# 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
该片段在桌面浏览器中运行良好,在我添加它之前,我无法在这些桌面浏览器中保留会话 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
今天,Mountain Lion 上的桌面 Safari 也开始不发送 cookie,其行为与 MobileSafari 类似.我不完全确定我昨天的评估是否不准确,或者 Apple 只是在欺骗我......
在远程 url 上使用 https://
也会影响这一点吗?
推荐答案
我不知道这个解决方案是否可行或您是否可以接受,但我在移动 Safari 和 JSONP 应用程序中遇到了同样的问题.似乎 Safari 并未设置为接受第三方 cookie.我去了设置> Safari>接受Cookie并设置始终",问题就消失了.祝你好运.
我可以在响应中设置cookie吗来自 jsonp 请求?
好了关于MobileSafari 不会发回使用 CORS 设置的 Cookie的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。