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

本教程将介绍MobileSafari 不会发回使用 CORS 设置的 Cookie的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

MobileSafari 不会发回使用 CORS 设置的 Cookie 教程 第1张

问题描述

我在 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的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。