Session über den Server in PHP übertragen

8

Ich muss die Benutzersitzung zwischen Servern übertragen. dh. Wenn sich der Benutzer bei Server1 angemeldet hat und der Benutzer in Server2 existiert, muss ich die Benutzer-Sitzungsdetails an Server2 übertragen. Dazu habe ich die folgende Technik verwendet.

Leiten Sie den Benutzer von server1 an Ссылка um Führen Sie auf server2 (intern im PHP-Code von auth_from_server1.php) eine Anfrage an Ссылка mit der Session-ID 12345 durch. Überprüfen Sie auf server1 in der Implementierung von check_session_id.php die ID und geben Sie OK, FAILURE und sitzungsbezogene Daten, die Sie übergeben möchten, wie z. B. Benutzername, ... zurück. Wenn der Anruf auf dem Server2 mit OK zurückkehrt, speichern Sie die übertragenen Sitzungsdaten und geben Sie dem Benutzer einen Cookie und eine Sitzung für diesen Server.

Aber wenn die Rückruffunktion die auth_from_server1.php aufruft, ist der Wert in der Sitzungs-ID null. Ich habe versucht, die SessionID als

zu überprüfen %Vor%

Aber $ _SESSION ['sessionId'] ist null. Auf der Login-Seite setze ich den Wert für die Session-ID als

%Vor%

Vielen Dank im Voraus ....

    
Damodaran 13.12.2010, 10:49
quelle

6 Antworten

16

Wäre es nicht einfacher, Sitzungsdaten nur in einem freigegebenen Verzeichnis zu speichern?

Alternativ können Sie es in einer Datenbank speichern .

    
PaulJWilliams 13.12.2010, 10:53
quelle
7

Ich würde vorschlagen, einen benutzerdefinierten PHP-Session-Handler zu schreiben oder einen vorgefertigten Session-Handler wie ShareDance zu verwenden. Sie können Sitzungsinformationen in einer MySQL-Datenbank speichern, die von beiden Maschinen gemeinsam genutzt wird, eine SQLite-Datei usw.

Es gibt viele Vorteile für die Verwendung von PHPs eingebauter Fähigkeit, Sitzungsdaten mit session_set_save_handler () zu erhalten / setzen, nämlich, dass alle Aufrufe von $ _SESSION in Ihrem Anwendungscode ohne zusätzliche Modifikationen funktionieren.

>

Weitere Informationen finden Sie hier: Ссылка

Ein Tutorial zum Schreiben von benutzerdefinierten Session-Handlern (alt, aber immer noch relevant) ist hier: Ссылка

    
John Kramlich 13.12.2010 11:21
quelle
3

Eine weitere Möglichkeit könnte das Teilen des Dateisystems sein. Da PHP die Sitzung in das Dateisystem stellt, können Sie das Dateisystem (zum Beispiel sshfs) auf beiden Servern gemeinsam nutzen.

Die Einstellung zum Ändern des Zielverzeichnisses in php.ini ist

%Vor%     
Eun 06.02.2015 15:47
quelle
3

Wenn Server 2 server1 / secret / check_session_id.php aufruft, muss er die Session ID wie server1 / secret / check_session_id.php? sessionid = 12345 senden und in check_session_id.php muss session_id($_GET['sessionid']) vor session_start() aufgerufen werden.

    
rik 13.12.2010 10:56
quelle
2

Ich denke, eine ID eines Benutzers in der Datenbank zu speichern, ist der am besten geeignete Weg, dies zu tun. Es ist ein fehlerfreier Weg.

Prost

    
Dhaval Kakkad 10.02.2015 10:16
quelle
2

Dieses Problem kann schnell aus dem Ruder laufen, wenn Sie dem Problem mehr und mehr Probleme hinzufügen. Eine der besten Lösungen, die ich gefunden habe, besteht darin, die Sitzung in einer Datenbank zu speichern und diese Datenbank mit den Servern zu teilen. Redis funktioniert normalerweise gut dafür. Hier ist ein guter Leitfaden für mit redis

beginnen     
Rick 12.02.2015 22:28
quelle

Tags und Links