2010-11-22 8 views
0

Wir haben eine Web-Anwendung mit Feature für die Anmeldung mit Krediten Die wichtige Voraussetzung ist, sobald der Benutzer anmeldet, er ist nicht berechtigt, von einem anderen System oder sogar einen anderen Browser auf dem gleichen System Wir verwendeten Folgende auf mssql basierende Lösung: Wir haben "Is_Loggedin" als Spalte mit dem Datentyp "bit" in einer Tabelle behalten. Wenn sich ein Benutzer anmeldet, setzen wir das Flag auf "1". Wenn jemand versucht, erneut zu loggen, zeigt das System den Fehler "Der Benutzer ist bereits eingeloggt" Wenn das Benutzerabmeldungsbit auf "0" wechselt, wird der Benutzer abgemeldet. Doch diese Logik wird in folgenden Szenarien FehlerMehrere Login-Problem

Problem Szenario: Wenn der Benutzer den Browser schließt das Flag „1“ ist und Benutzer in oder Situationen gesperrt ist, wenn der Benutzer Systemproblem und nicht in der Lage bekommt

abzumelden Ist Gibt es eine bessere Logik, um diese Anforderung zu erfüllen?

+0

Warum haben Sie so eine seltsame Anforderung in einer Webumgebung? IMO muss eine Webanwendung damit umgehen können. – Steven

+1

Die Anforderung besteht wahrscheinlich darin, den Zugriff des Systems durch denselben Benutzer auf mehrere Male gleichzeitig zu verhindern. Die Anforderung ist nicht so merkwürdig IMO, aber es ist unmöglich, zuverlässig zu erkennen, wenn ein Web-Benutzer im System ist oder wenn sie gegangen sind. – mellamokb

Antwort

0

Während der Benutzer angemeldet ist, können Sie einen AJAX-Aufruf haben, der den Server alle 30 Sekunden anmeldet, in denen der Benutzer angemeldet ist. Lassen Sie eine Spalte Is_LoggedIn und Last_LoggedIn für das Datum/die Uhrzeit des letzten AJAX-Aufrufs anzeigen . Wenn es länger als beispielsweise 1 Minute war, erlauben Sie dem Benutzer, sich von einem anderen System aus anzumelden.

Sie haben auch ein Problemszenario, wenn der Benutzer seinen Browser länger als die Sitzungs-Timeout-Zeit geöffnet lässt, normalerweise 20 Minuten. Dann werden sie bei der nächsten Anfrage abgemeldet, aber sie können sich nicht mehr einloggen, weil is_LoggedIn auf 1 gesetzt ist. Es wäre besser, eine Art zeitbasierte Lösung zu machen, um zu verfolgen, ob der Benutzer noch aktiv ist Eine Website ist ein sehr schwieriges Problem wegen der vielen Möglichkeiten, wie sie die Website verlassen können, ohne sich wirklich abzumelden.

Wenn es absolut wichtig ist, die Möglichkeit zu vermeiden, dass der Benutzer an mehreren Orten angemeldet ist, können Sie auch alle anderen Orte automatisch abmelden, wenn sich der Benutzer an einem neuen Ort anmeldet.

0

Sie können das Flag 'Is_Loggedin' beim Ereignis session_end von global.asax auf 0 setzen. Sitzung_Ereignis ist immer Anruf. session _end event call wenn session_timeout abläuft.

0

in der global.asax Code hinter Ich glaube, es gibt eine sogar für Sitzung Ende. Sie können sich an diese Methode binden und das Is_LoggedIn-Flag des Benutzers auf 0 setzen. Außerdem müssen Sie einen Benutzer an einen Sitzungsschlüssel binden, um die Sitzung eines Benutzers verfolgen zu können.

Edit: Auch die Verwendung eines Session-Cookies oder eines normalen Cookies kann helfen, wenn der Benutzer seinen Browser schließt. Der Cookie würde sie beim erneuten Öffnen des Browserfensters authentifizieren; Dies hat jedoch eine potenzielle Sicherheitslücke, wenn der Benutzer einen öffentlichen Computer verwendet.

0

Sie könnten den Benutzer nach einer gewissen Inaktivität (etwa 30 Minuten) abmelden. Wenn der Benutzer den Browser schließt, ohne sich abzumelden, kann er sich nach 30 Minuten erneut anmelden.

0

Verwenden Sie Session_End, wie von Pankaj vorgeschlagen, um sicherzustellen, dass das Benutzerbit beim Abmelden auf 0 gesetzt wird.

Das Problem mit Systemfehlern ist ein anderes Problem. Vielleicht könnte das den Trick machen: Wenn sich der Benutzer anmeldet, speichert er die Sitzungs-ID des Benutzers in der Datenbank. Wenn sich der Benutzer abmeldet, löschen Sie die Sitzungs-ID. Jedes Mal, wenn der Benutzer eine Anfrage stellt, verifizieren Sie, dass die Sitzungs-ID mit der in der Datenbank gespeicherten übereinstimmt. Wenn dies nicht der Fall ist, deaktivieren Sie die Sitzung, damit der Benutzer abgemeldet wird.

Dies sollte passieren: Wenn sich der Benutzer in einem anderen Browser anmeldet, wird die Sitzungs-ID aktualisiert. Wenn der Benutzer dann zum ersten Browserfenster zurückkehrt und auf etwas klickt, wird diese Sitzung ungültig und der Benutzer wird automatisch abgemeldet.

Verwandte Themen