Ich habe hier ein paar verwandte Beiträge gelesen, aber ich kann nicht scheinen, dass mein Skript so funktioniert wie beabsichtigt.
Ich habe eine Login-Seite, auf der sich ein Benutzer anmeldet. Wenn das Passwort übereinstimmt, schreibt das Skript zwei Werte in die Variable $_SESSION
: ['loggedin']='yes'
und ['loginname']="username"
.
Nach erfolgreicher Anmeldung geht der Benutzer zu einer anderen Seite mit zwei iframes.
Ein iframe verwendet externen Inhalt und erfordert keine Authentifizierung (das Entfernen dieses iframes von der Seite ändert nichts).
Der andere iFrame verwendet dynamisch generierten Inhalt aus derselben Domäne und überprüft, ob die Sitzungsvariablen noch vorhanden sind.
Eine der Funktionen aktualisiert den Inhalt dieses dynamisch generierten iframes.
Sobald dies erledigt ist, sind die Sitzungsvariablen verloren. Tatsächlich existiert die Sitzung selbst nicht mehr.
Ich habe session_start();
auf jeder Seite, die in Verbindung mit diesem Skript verwendet wird.
Jede Hilfe wird sehr geschätzt.
Ich glaube, dieser Artikel wird nützlich sein: Ссылка
Die kurze Antwort lautet: Starten Sie im Iframe die Sitzung wie folgt:
%Vor%BEARBEITEN:
Ich dachte, ich sollte diese Antwort aktualisieren, da ich auf etwas gestoßen bin, über das jeder wissen sollte.
Dieser p3p-Header-Hack funktioniert auf Safari nicht .
Im Folgenden beschreibe ich meinen Login-Ablauf und wie ich dieses Problem gelöst habe.
Mein Login-Flow sieht so aus (Seiten-App):
ABER Hier kommt der Fehler.
Wenn ein Benutzer Safari verwendet und versucht, diese App zu öffnen, wenn die Sitzungen bereits zerstört wurden (ein paar Tage später), passiert Folgendes:
Wichtig ist hier, dass dieser Code in einer Seitenregisterkarte innerhalb eines iframes ausgeführt wird.
Also wird der Code für die meisten Benutzer funktionieren, wegen des p3p header hacks.
Aber für Safari-Benutzer wird es nicht.
Safari kümmert sich nicht um die angegebene Kopfzeile, es verweigert das Speichern der Sitzung, daher meldet sich der Benutzer bei der App an, alles scheint gut zu funktionieren, aber die Ajax-Aufrufe funktionieren nicht, da sie nicht funktionieren jede Sitzung mit zu arbeiten.
Die Problemumgehung:
Ganz einfach eigentlich - Obwohl nicht zu elegant, aber hey, es funktioniert. -: Ich überprüfe, ob der Client-Browser Safari ist oder nicht, und wenn ja, leite ich auf eine benutzerdefinierte URL um, wo ich eine Sitzung - außerhalb des Facebook-Iframes - starte, um dann zurück zur App zu leiten.
Dadurch wird der Cookie ohne Probleme erstellt, sodass Sitzungen verfügbar sind.
Hier haben Sie einen Code:
Überprüfen der Sitzung (Kredit geht an diesen Typen)
%Vor%Einstellen der Sitzung (setcookie.php)
%Vor%Ich hoffe, dass dieser zusätzliche Trick jemandem helfen wird.
EDIT2
Ich habe das bisher noch nicht getestet, aber anstatt den P3P-Header hinzuzufügen, könnten Sie einfach die folgenden Zeilen zu Ihrem .htaccess hinzufügen:
%Vor%Mit Kommentaren:
%Vor%Alles Lob gebührt diesem .htacces-Code für die Leute hinter dem Yeoman -Projekt.
Fügen Sie zu jeder Ihrer Seiten in den Frames Folgendes hinzu:
echo "Session ID: ".session_id();
Dies sollte die Sitzungs-ID auf jeder Seite ausgeben. Es ist möglich, dass eine neue Sitzung auf einem der Frames generiert wird. Wenn Sie das oben genannte überprüfen, können Sie diese Möglichkeit ausschließen.