MobileSafari sendet keine mit CORS gesetzten Cookies zurück

9

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:

  1. POST https://myremoteserver.com/sessions.json übergibt meine Login-Daten
  2. Es ist erfolgreich und die Antwort wird mit einem gültigen Header Set-Cookie empfangen.
  3. GET https://myremoteserver.com/checkout.json wird angefordert, ohne einen Cookie request-Header.
  4. Der Server antwortet, als wäre ich nicht eingeloggt.

Ich verwende dieses Snippet mit Zepto.js , um sicherzustellen, dass das withCredentials: true korrekt auf dem XHR-Objekt eingerichtet ist. (entschuldige das Kaffeescript)

%Vor%

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?

    
Alex Wayne 08.01.2013, 00:37
quelle

4 Antworten

2

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?

    
schellsan 31.07.2013 23:53
quelle
0

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:

  • Verwenden Sie eine Weiterleitung auf dem Remote-Server, so dass Sie beim Umleiten des Clients (die Remote-URL befindet sich in der Browserleiste) den Cookie
  • festlegen können
  • Verwenden Sie einen benutzerdefinierten Header
themihai 19.03.2014 14:18
quelle
0

Ich hatte das gleiche Problem.

Mein Setup war:

  • AngularJS (Ionic) App auf Server A mit Domäne a.com
  • NodeJS mit Passport JS als Backend auf Server B mit Domäne b.com

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

    
Sebastian 31.03.2016 12:04
quelle
-1

Öffnen Sie eine Adresse, die den Cookie über einen iFrame setzt - dadurch wird der Cookie gesetzt.

    
Butch128 04.11.2014 05:49
quelle