2016-07-12 8 views
1

erkennen kann Ich versuche, einen Chat mit express.js & socket.io zu machen. Derzeit können Benutzer in meinem Chat mehrere Registerkarten im selben Browser öffnen und über alle diese Registerkarten chatten. Dies bedeutet, dass derselbe Client gleichzeitig mit mehreren Personen chatten kann. Ich möchte dieses Verhalten verhindern.Wie man den gleichen Client in socket.io

Ich möchte einen Client verhindern, verbindet jedes Mal zu unterhalten, wenn:

1) Client auf verschiedenen Registerkarten auf dem gleichen Browser funktioniert

2) Client verschiedene Browser geöffnet und arbeitet über sie

Wie kann ich das tun? Danke!

Antwort

0

Sie können denselben Benutzer auf verschiedenen Registerkarten im selben Browser finden, indem Sie Cookies verwenden, um einen bestimmten Browser zu identifizieren. Bei der ersten Verbindung (entweder socket.io oder eine ausdrückliche Anforderung) legen Sie eine eindeutige Cookie-ID fest, und bei nachfolgenden Verbindungen überprüfen Sie, ob diese eindeutige Cookie-ID bereits verwendet wird. Sie müssen in Ihrer speziellen Anwendung definieren, was "in Verwendung" bedeutet. Für socket.io-Verbindungen ist das ein wenig einfacher, da es momentan bereits eine aktive Verbindung gibt. Bei Express-Anfragen ist das ein wenig schwieriger, weil Anfragen zeitlich begrenzt sind, also müssen Sie entscheiden, wie Sie den Unterschied zwischen verschiedenen Tabs unterscheiden oder nur einen Tab auf eine neue Seite navigieren (das ist app-spezifisch, wie Sie das tun könnten).

Um mehrere Browser zu erkennen, müssen Sie über eine Benutzerauthentifizierung verfügen und davon ausgehen, dass Benutzer nicht mehrere Konten erstellen oder ein System einrichten, das verhindert, dass derselbe Benutzer mehrere Konten erstellt. Sie verwenden dann wie in dem vorherigen Beispiel in einem Cookie einen Authentifizierungsnachweis für den Account, um festzustellen, ob eine Sitzung für diesen Benutzer bereits verwendet wird.

+0

Zunächst einmal, vielen Dank für Ihre Hilfe !!! Für den ersten Fall haben Sie Recht - Cookies oder Sitzungen reichen aus, um einen Benutzer zu erkennen, der im selben Browser, aber auf mehreren Tabs arbeitet. Aber für den zweiten Fall möchte ich keine Benutzerauthentifizierung am mommet bereitstellen. Ich habe einen Chat gesehen, der denselben Client erkennt, der mit mehreren Browsern arbeitet, und dieser Chat funktioniert ohne Benutzerauthentifizierung. Ich möchte das Gleiche tun. – Emil

+0

Ich denke, ich habe eine einzige Lösung für mein Problem gefunden. Wenn wir eine 'socket.handshake.address' verwenden, um eine IP-Adresse des Clients zu erhalten, können wir diesen Client jedes Mal erkennen, wenn er eine Verbindung über Sockets von demselben Rechner aus öffnet. – Emil

+1

@Emil - Aufgrund von Proxies und NAT und Benutzern in privaten Netzwerken kann nicht garantiert werden, dass eine IP-Adresse eindeutig einem einzelnen Benutzer entspricht. Eine Website würde alle Benutzer von meinem Haus (alle von ihren eigenen Computern) als dieselbe IP-Adresse wegen NAT in unserem Heimrouter sehen. Das gleiche kann für Benutzer von Unternehmen gelten. Wenn Sie also nur die IP-Adresse verwenden, verweigern Sie Benutzern fälschlicherweise die erste Verbindung, nur weil ein anderer Benutzer im selben privaten Netzwerk Ihren Dienst verwendet. – jfriend00