Wie erstelle ich einen Handshake zwischen PHP Webserver und Socket.io auf dem node.js Server?

9

Ich habe einen Websocket auf node.js 4.0 auf dem Server 10.0.4.18 an Port 8020. Ich habe meinen Websocket mit socket.io v1.3, express und express-session implementiert.

Projektdefinition

Ich muss in der Lage sein, eine Sitzung in socket.io für jeden Benutzer zu erstellen, der sich mit einer PHP-Anwendung verbindet. Nachdem der Benutzer die erste HTTP-Anfrage gesendet hat, authentifiziere ich ihn mit einem Token, das zusammen mit der HTTP-Anfrage von PHP an socket.io übergeben wird.

Nachdem der Benutzer authentifiziert wurde, muss ich einige persönliche Daten in der socket.io-Sitzung speichern, um sie später wieder zu verwenden. Jedes Mal, wenn der Benutzer die PHP-Anwendung aktualisiert, muss socket.io die Sitzungsdaten kennen, die bereits erstellt wurden.

Problem

Jedes Mal, wenn der Benutzer die PHP-Seite "wo er / sie verbunden hat" erneut lädt / aktualisiert, gehen die Sitzungsdaten verloren. Der Server erkennt nicht, dass diese Verbindung zur Sitzung XYZ gehört, die zuvor erstellt wurde.

Ich bin mir nicht sicher, wie ich einen Handshake zwischen PHP und node.js erstellen kann, wo die beiden Server einzigartige Daten austauschen können, um die socket.io-Sitzung mit zu verknüpfen.

Schauen Sie sich das Problem sehr genau an

Ich habe diesen Link in meinem Browser Ссылка geöffnet. "Damit habe ich direkt aus node.js eine Session für den Routencode erstellt"

Dann habe ich über PHP mit dem Websocket verbunden, jetzt kann ich sehen, dass die Session ohne Probleme bleibt! Ich konnte mehrere Registerkarten im Browser öffnen und die gleiche Sitzung ist dort wie erwartet.

Der Grund, warum es dieses Mal funktioniert hat, ist, dass die URL Ссылка eine Sitzung eingerichtet und sie zwischen meinem Browser und der Sitzung gebunden hat und von dort konnte ich meine Sitzung von socket.io mit dem Express-socket.io-session-Paket lesen / schreiben Ссылка .

Aber wenn ich die Sitzung nicht manuell über die URL erstelle, ist die Sitzung nur für das Laden nur einer Seite geeignet. Und jedes Mal, wenn die Seite neu geladen wird, wird die Sitzung zerstört, als hätte sie nie existiert!

Frage

Ich muss das gleiche Verhalten bei der Verbindung mit dem Websocket über Ссылка entwickeln, wenn ich von der socket.io.

Wie kann ich einen Handshake zwischen PHP-Server und socket.io einrichten, bei dem die beiden Server die Sitzungsdaten jedes Mal an den richtigen Benutzer binden können, wenn die PHP-Seite neu geladen oder der Tab eines neuen Browsers geöffnet wird?

Hier ist mein Websocket-Code

%Vor%

So stelle ich eine Verbindung zum Websocket vom PHP-Server her her

%Vor%     
Mike A 22.09.2015, 23:53
quelle

1 Antwort

2

Speichern Sie das Token im Browser und senden Sie es mit jeder Anfrage vom php mit einem Autorisierungsträger, der wie folgt aussieht:

%Vor%

Jedes Mal, wenn der node.js-Server eine Anforderung erhält, können Sie das Token, mit dem der Benutzer übereinstimmt, vergleichen und die Daten abrufen.

Sie können die Beziehung zwischen der Benutzer-ID und dem Token mit einem Ablaufdatum in einer Tabelle speichern und das Token bei jeder Anmeldung aktualisieren.

Auch wenn Sie keine Tabelle verwenden möchten, können Sie die Daten mit JWT

im Token speichern

Weitere Informationen finden Sie hier:

Ссылка

    
Alex7 24.09.2015 10:54
quelle