2009-01-27 8 views
6

Ich habe einfache PHP-Anwendung, funktioniert es auf allen Browsern außer IE8 Beta 2, Problem auftritt, wenn ich versuche, Tabellenfeld mit Ajax Aufruf (jQuery Post-Methode) zu aktualisieren. Mit dem IE8 Debugger finde ich heraus, dass IE8 kein Session-Cookie sendet, so dass PHP-Skripte zur Anmeldeseite umleiten, anstatt die angeforderte Aktion auszuführen.Internet Explorer 8 Session-Cookie für AJAX-Anfrage nicht übergeben

Was kann ich tun, damit dies funktioniert?

Edit: Ich habe nicht erwähnt, dass ich Code Igniter verwendet habe, also habe ich dieses Problem gelöst, indem ich Code Igniter Standard-Session-Implementierung mit nativen ersetzt. Die Standard-Session-Implementierung des Code-Zünders verwendet Cookies, um alle Daten zu speichern.

+0

kommt der IE 8 die schicken Cookie auf normale Anfrage? – Gumbo

+0

Auf normale Anfrage funktioniert ok, aber nach Ajax-Anfrage löscht es Cookie. –

+1

CodeIgniter Session-Implementierung saugt –

Antwort

-3

Als Workaround können Sie die SessionID als Parameter in die URI einbetten.

Siehe im PHP-Handbuch.

5

Ich habe IE8 nicht selbst, aber Ihr Cookie wird möglicherweise durch die seltsamen Sicherheitsrichtlinien von Internet Explorer blockiert. Eine mögliche Problemumgehung kann darin bestehen, P3P zu verwenden (dies ist auch die Methode zum Abrufen von Cookies in einem IFRAME).

die richtige P3P-Richtlinie generieren kann ein bisschen Arbeit, aber Sie sollten die Informationen, die Sie benötigen, um http://www.p3ptoolbox.org/

0

Ich hatte das gleiche Problem in IE8 RC1 Lage zu finden:

1) einen Benutzer geht zur Login-Seite und ein leerer Session-Cookie wird gesetzt
2) Der Benutzer meldet sich an und ein validierter Session-Cookie wird gesetzt und Javascript öffnet ein neues Fenster und schließt das aktuelle Fenster.
3) Das neue Fenster wird geöffnet und enthält einen leeren Sitzungscookie.
4) Der Benutzer wird auf die Anmeldeseite umgeleitet

Ich änderte Schritt 1, so dass das leere Cookie nicht festgelegt wurde - ich sende nur das Session-Cookie, wenn es validiert wurde. Das hat das Problem für mich behoben.

0

Ich habe Probleme mit IE8, SSL-Zertifikate (PK12) -Dateien als Mittel zur Autorisierung zu verwenden. Wenn ich ein Verzeichnis schützen und ein passendes Web-Zertifikat erzwingen möchte, bevor es Zugriff gewährt, muss es im Browser vorhanden sein. Es funktioniert gut mit IE7 und allen Versionen von Mozilla - nur nicht IE8. Es hat das Diktatsystem meiner Frau nutzlos gemacht. Eine andere Sache, die ich bemerkte, ist, dass, wenn es den PHPSESSID-Cookie setzt, es die Domäne als .net und nicht mydomain.net auflistet.

8

Gestern hatte ich ähnliches Problem und fand die Lösung. Ich hoffe, das wird auch anderen helfen.

Problem: Angenommen www.somewebsite.com und IFRAME im Inneren eine Website gibt es Whcih PHP-Datei von meinem Server lädt, www.myserver.com/welcome.php. Die Webseite wurde erfolgreich geladen, genauso wie meine Willkommensseite und es zeigte so etwas wie "Hallo Bob", so dass es erfolgreich gefunden und eingeloggt wurde.

Danach machte mein JavaScript AJAX-Aufrufe zu einer anderen PHP-Datei, und die Antwort war nett im Zustand "nicht autorisiert", so dass SESSION-Daten vollständig fehlten. Nach der Seitenaktualisierung funktionierte alles korrekt. Und das geschah nur unter IE8!

Ich dachte, dass das Problem mit Sitzungscookies zum Server war, aber als ich Fiddler installierte, fand ich, dass IE8 Cookies sowie PHPSESSID korrekt sendete, aber Server war irgendwie unfähig, korrektes SESSION-Objekt zu erkennen. Eine weitere seltsame Sache war, dass zweite Zeitserver folgende Header gesendet:

P3P: CP = "IDC DSP COR ADM Devi TaiI PSA PSD Ivaí IVDi CONi HIS OUR IND CNT"

aber erstmals nicht. Nachdem dieser Header manuell in PHP-Skript hinzugefügt wurde, funktionierte alles wie ein Zauber!

Dann, als ich, dass „p3p Abrakadabra“ googeln, fand ich folgende Website:

http://adamyoung.net/IE-Blocking-iFrame-Cookies

Fazit: Vergewissern Sie sich, dass Sie auf jeder Seite den Header sind zu senden, die ein Cookie setzt .

Und das ist nicht nur im Zusammenhang mit IE8 + PHP Kombination, gleiche Problem tritt bei IE8 + ASP.NET, IE8 + JSP usw.

+0

das war die Lösung für meine Nicht-Frame-Jsonp-Cross-Domain-Anfrage, die keine Cookies gesendet hat. Gracias! – changokun

Verwandte Themen