Ich habe in MobileSafari eine Seite geladen, die über CORS mit einem anderen Server kommuniziert hat.
In Desktop-Browsern (getestet in Chrome und Safari) kann ich mich anmelden, einen Sitzungscookie abrufen und diesen Sitzungscookie für nachfolgende Anfragen zurücksenden lassen, sodass ich mit allen API-Aufrufen authentifiziert werden kann.
>Wenn ich mich jedoch über Mobile Safari anmelde, wird der Cookie nicht bei nachfolgenden Anfragen zurückgesendet.
Ich benutze Charles Proxy, um zu sehen, was vor sich geht, und es sagt mir:
POST https://myremoteserver.com/sessions.json
übergibt meine Login-Daten Set-Cookie
empfangen. GET https://myremoteserver.com/checkout.json
wird angefordert, ohne einen Cookie
request-Header. Ich verwende dieses Snippet mit Zepto.js
, um sicherzustellen, dass das withCredentials: true
korrekt auf dem XHR-Objekt eingerichtet ist. (entschuldige das Kaffeescript)
Und dieses Snippet funktioniert gut in Desktop-Browsern, und bevor ich es hinzugefügt habe, konnte ich die Sitzungscookies in diesen Desktop-Browsern nicht beibehalten.
Gibt es in MobileSafari eine Eigenart, die verhindert, dass dies wie Desktop-Browser funktioniert? Warum funktioniert es nicht auf die gleiche Weise?
Bearbeiten!
hier ist meine CORS-Header-Einrichtung in meiner Rails 2.3 App, ziemlich Standard-Sachen, die ich glaube
%Vor%Auch heute hat Desktop Safari auf Mountain Lion damit begonnen, den Cookie nicht mehr zu senden, sondern sich wie MobileSafari zu verhalten. Ich bin mir nicht ganz sicher, ob meine Einschätzung gestern falsch war oder ob Apple mich nur trolling ...
Könnte dies auch durch die Verwendung von https://
in der Remote-URL beeinflusst werden?
Ich weiß nicht, ob diese Lösung funktioniert oder für Sie akzeptabel ist, aber ich hatte das gleiche Problem mit Mobile Safari und einer JSONP-App. Es scheint, dass Safari keine Cookies von Drittanbietern akzeptiert hat. Ich ging zu Einstellungen & gt; Safari & gt; Akzeptiere Cookies und setze 'Immer' und das Problem verdunstet. Viel Glück.
Kann ich in einer Antwort Cookies setzen? von einer jsonp Anfrage?
Sie haben nicht erwähnt, ob sich der Remote-Server in einer anderen Domäne oder nur in einer anderen Sub-Domain befindet. Ich nehme an, ist unter einer anderen Domäne.
Wie @schellsan darauf hingewiesen hat, können Sie keine Cookies in einer anderen Domain setzen / schreiben, selbst wenn die CORS-Richtlinie dies aufgrund der Beschränkung von Cookies durch Drittanbieter erlaubt. Es ist die neueste Safari-Einschränkung. Ich nehme an, Firefox wird das gleiche tun.
Workarounds, die ich gerade evaluiere:
Ich hatte das gleiche Problem.
Mein Setup war:
Der Login mit dem Cookie ist in jedem Browser gut gelaufen, mit Ausnahme von Mobile Safari unter iOS. Auch die Änderung der Einstellungen für mobile Cookies (nicht verfolgen) in iOS hatte keine Auswirkungen auf das Problem.
Die Lösung bestand darin, einen CNAME-DNS-Datensatz festzulegen
backend.a.com CNAME b.com
Tags und Links javascript ios ajax coffeescript cors