2009-12-27 44 views
6

Wie überprüfen Sie, ob ein Benutzer bereits angemeldet ist?überprüfen, ob ein Benutzer bereits angemeldet ist?

, damit sich ein Benutzer in einem anderen Browser nicht mit demselben Konto anmelden kann.

auch, ist dies eine gute Lösung oder sollte ich den Benutzer in den anderen Browser einloggen und dann den aktuellen Benutzer ausloggen und eine Nachricht anzeigen (Sie sind von einem anderen Ort eingeloggt), genau wie Messenger tut?

Antwort

1

Die erste Hälfte der Frage beantwortet wurde gut mit, wie die mehrere Benutzer zu erkennen, sondern wie sie behandeln Ich denke immer noch ein bisschen Arbeit braucht.

Zuerst, wenn ein Benutzer sich korrekt anmeldet, lassen Sie sie nicht, wenn sie an einem anderen Ort angemeldet sind. Wenn Sie nicht möchten, dass der Benutzer zwei offene Sitzungen hat, dann loggen Sie sich ab oder aktualisieren Sie einfach die Sitzungs-ID, die Sie speichern, damit Sie die alte Verbindung ablehnen können. Sie können informieren, wenn Sie möchten, aber ich würde nur die Sitzung melden, die Sie für ungültig erklärt haben. Wenn Sie den Benutzer anmel- den, wird es lästig, wenn Sie sich nur mit dem Fall eines Benutzers beschäftigen, der den Computer wechselt, und vergessen, sich aus der alten Sitzung abzumelden.

3

Generieren Sie ein zufälliges Token beim Anmelden (oder verwenden Sie die Sitzungs-ID) und speichern Sie dieses in der Datenbank und im Benutzer-Cookie. Stellen Sie bei jedem Seitenzugriff sicher, dass das Benutzertoken dem Datenbankeintrag entspricht. Wenn die beiden nicht übereinstimmen, warnen Sie den Benutzer, dass er sich an anderer Stelle angemeldet hat.

könnten Sie speichern auch die Login-Zeit, die später die Zeit der Token zugewiesen wurde sein würde und benötigen 30 Minuten vor dem anderen Benutzer ermöglicht, mit der gleichen ID einzuloggen.

+0

Speichern der Sitzungs-ID in der Datenbank ist noch besser. – TravisO

+0

Das würde auch funktionieren, TravisO :) – Sampson

2

sessions ist eine gute Möglichkeit, dies zu tun, und ist eine sehr verbreitete Methode zur Authentifizierung zu steuern.

Die Strömung in der Regel etwas wie folgt aussieht:

  • Nutzer besucht Website und session_start() aufgerufen. Eine eindeutige Sitzungskennung wird für diesen Besucher festgelegt (dh ein Cookie).
  • Benutzer sendet seine Anmeldedaten zu einem Anmeldeformular
  • Anmeldeinformationen überprüft werden, und diese Tatsache wird in den Sitzungsdaten mit $_SESSION['logged_in'] = true, oder etwas ähnliches
  • Für den Rest des Benutzers Zeit auf der Website gespeichert, Sie kann $_SESSION['logged_in'] überprüfen, um zu sehen, ob der Benutzer angemeldet hat.

um einen Benutzer Logins zu steuern, können Sie einfach in einer Datenbank ein Feld haben (users Tabelle ist in Ordnung), das anzeigt, was die aktuelle Session-ID (abgerufen mit session_id()) für den Benutzer, und wenn es nicht den Cookie-Wert übereinstimmt, den Sie jus t erhalten, dann rufen Sie sofort session_destroy() für diese ID an und betrachten den Benutzer als ausgeloggt.

Die Verwendung von $_SESSION bedeutet, dass Sie sich keine Gedanken über das Generieren eigener Tokens machen müssen und die integrierten Superglobals nutzen können, um Informationen über den Authentifizierungsstatus des Benutzers zu speichern.

Persönlich würde ich mehrere Sitzungen für einen Benutzer für die meisten Websites aktiv sein, da es in der Regel keinen guten Grund nicht gibt, aber es hängt natürlich von der Art der Website ab. Jedoch, wie oben erwähnt die aktuelle aktive Session-ID zu speichern ist eine ziemlich einfache Art und Weise, dies zu erreichen.

+0

Denken Sie auch daran, eine neue Sitzung nach dem Login zu generieren, wenn Sie nur eine Sitzung auf der ersten Seite im Login-Formular generieren und nicht neu generieren, gibt es Möglichkeiten, diesen Benutzer auszunutzen . – TravisO

0

Well Alle oben genannten Lösungen funktionieren wird, aber wenn auf jeder Seite Zugriff Sie einen Anruf zur Datenbank machen und für die Session-Token Überprüfung seiner denselben Token Benutzer zugewiesen, um zu sehen Wetter .. Ihre Reaktionszeit töten. Was ich vorschlagen werde, ist ein Caching-Mechanismus anstelle der Datenbank in oben genannten Lösungen. Das Speichern des Sitzungstokens in der Datenbank fügt der Datenbank ein zusätzliches Feld hinzu, das eigentlich nicht benötigt wird. Verwenden Sie Open-Source-Caching-Lösung wie Memcache.

0

Sie eine Tabelle wie userLoginStatus mit Feldern wie clockin Zeit & ClockOut Zeit, und legen aktuelle Zeit in clockin wenn Benutzer tun Login, lassen ClockOut Zeit leer zu diesem Zeitpunkt machen kann, sollte es nur dann aktualisiert werden, wenn der Benutzer Uhr tun Über die Schaltfläche "Abmelden", , können Sie den aktuellen Status des Benutzers überprüfen, wobei "clockOut" leer ist, dass der Benutzer angemeldet sein sollte. Er wird nur aktualisiert, wenn sich der Benutzer abmeldet.

Verwandte Themen