webentwicklung-frage-antwort-db.com.de

Nur ein gleichzeitiger Login pro Benutzer in Asp.net

kann in Asp.Net-Webanwendung pro Benutzer nur ein gleichzeitiges Anmelden zugelassen werden? 

Ich arbeite an einer Webanwendung, in der ich sicherstellen möchte, dass die Website jeweils nur ein Login pro Benutzer zulässt. So prüfen Sie, ob der aktuelle Benutzer bereits angemeldet ist oder nicht. 

eine geeignete Anmeldemethode vorschlagen, mit der wir dieses Problem lösen können. Ich denke, wir sollten den SQL Server-Sitzungsstatus verwenden, um dieses Problem zu lösen. was schlägst du vor ?

Ich dachte eine Lösung dafür. Ich weiß nicht, ob es richtig ist oder nicht. wir können so etwas tun:

  1. Wenn sich der Benutzer im System anmeldet, fügen wir die Sitzungs-ID in die Spalte "Benutzer" ein. (Wir werden die Datenbanksitzung verwenden, um alle sitzungsbezogenen Daten wie isexpired, abgelaufene Zeit usw. problemlos abrufen zu können).

  2. Wenn derselbe Benutzer versucht, sich zum zweiten Mal anzumelden, werden wir nach dieser Sitzungs-ID-Spalte suchen und prüfen, ob die Sitzung bereits abgelaufen ist oder nicht. Wenn die Sitzung nicht abgelaufen ist, können wir den Benutzer nicht einloggen. 

  3. Aktualisieren Sie die Benutzersitzungs-ID jedes Mal, wenn sich der Benutzer abmeldet.

Bitte schlagen Sie diesen richtigen Weg vor oder nicht. 

11
Hiren Dhaduk

Bitte beziehen Sie sich auf:

Wenn dieselbe Benutzer-ID versucht, sich auf mehreren Geräten anzumelden, wie bringe ich die Sitzung auf dem anderen Gerät ab?

.NET unterstützt dies nicht. .NET ermöglicht gleichzeitige Anmeldungen, wie Sie sicher wissen.

Ich hatte genau diese Anforderung und kam zu einer ziemlich glatten Lösung, die im Link oben gezeigt wurde. Kurz gesagt, meine Forderung war, dass sich nur ein Benutzer gleichzeitig anmeldet. Wenn dieselbe Benutzer-ID versucht hat, sich an einem anderen Ort anzumelden, wurde die Sitzung für die erste Anmeldung abgebrochen, indem nach einer vorhandenen Anmeldung unter einer anderen Sitzungs-ID gesucht wurde. Dadurch konnte die Benutzer-ID von mehreren Instanzen ihrer Benutzer angemeldet werden Webbrowser auf ihrem Computer [gleiche Sitzungs-ID], der üblich ist, jedoch nicht von einem anderen Computer [andere Sitzungs-ID] (möglicherweise aufgrund einer Person, die ihre Anmeldeinformationen gestohlen hat). Durch die Änderung des Codes können Sie möglicherweise das Verhalten ändern, d. H. Den zweiten Anmeldeversuch verhindern, anstatt den ersten aktiven Anmeldevorgang abzubrechen.

Natürlich passt es möglicherweise nicht zu 100% zu dem, was Sie brauchen. Sie können es also jederzeit an Ihre Bedürfnisse anpassen.

9
Mike Marks

Sie können pro Benutzer einen Cache-Eintrag erstellen und darin die Sitzungs-ID speichern. Die Sitzungs-ID ist für jede Browsersitzung eindeutig. Auf Ihrer Anmeldeseite können Sie diesen Cache-Eintrag erstellen, wenn er sich erfolgreich angemeldet hat:

if(Cache.ContainsKey["Login_" + username])
    // Handle "Another session exists" case here
else
    Cache.Add("Login_" + username, this.Session.SessionID);

(Code in Textfeld ohne Syntaxprüfung eingegeben. Angenommen, "Pseudo-Code".)

In global.asax können Sie dann in Session_End einhaken und den Cache-Eintrag des Benutzers verfallen lassen. Siehe dies für die global.asax -Ereignisse.

if(Cache.ContainsKey["Login_" + username])
    Cache.Remove("Login_" + username);
5
Tombala

Sie können in der Benutzertabelle eine Flagspalte hinzufügen, die angibt, dass ein Benutzer derzeit angemeldet ist. 

Wenn ein Benutzer versucht, sich anzumelden, markieren Sie das Kennzeichen, wenn es wahr ist (das Benutzerkonto wird bereits verwendet). Dann erlauben Sie dem neuen Benutzer nicht, sich anzumelden. Wenn das Kennzeichen falsch ist, können sich die Benutzer dort anmelden Konto wird derzeit von niemand anderem verwendet.

Beachten Sie jedoch, dass Sie nicht wissen, wann sich die Benutzer aktiv abmelden, wenn die Benutzer sich zu einem anderen Vorgang bewegen (zu einer anderen Website wechseln oder den Browser schließen usw.). Daher müssen Sie eine Art Sitzungszeitlimit festlegen, das automatisch abgemeldet wird der Benutzer, wenn innerhalb eines bestimmten Zeitraums keine neuen Anforderungen vorliegen. 

Das heißt, wenn ein Benutzer seinen Browser schließt und versucht, sich beispielsweise auf einem mobilen Gerät anzumelden, kann er sich nicht anmelden, bis das angegebene Sitzungszeitlimit abgelaufen ist. Denken Sie also beim Timeout nach Sie möchten nicht, dass sich der Benutzer schnell abmeldet (wenn er eine lange Seite liest usw.), und Sie möchten nicht, dass sich die Benutzer nicht stundenlang bei einem anderen Gerät anmelden können, falls sie vergessen haben ausloggen, bevor Sie das Haus verlassen.

2
Markus-ipse

Wenn Sie ein Identitätssystem verwenden, hilft Ihnen dieser Link, wie Sie sich mit einem Benutzer auf mehreren Geräten anmelden. Mehrere Anmeldungen in Asp.Net Identity verhindern Ich habe versucht, dass sie in meinem System einwandfrei funktionieren Asp.net Mvc Projekt.

1
Hamza Shafiq

Die Anmeldeinformationen werden in dem Cookie gespeichert. Um zu wissen, ob der Benutzer angemeldet ist, müssen diese Informationen auf dem Server aufbewahrt werden, bevorzugt in einer Datenbank, da die Datenbank der einzige gemeinsame Platz im Webgarten oder im Internet sein kann Webfarm.

Was Sie behalten können, steht auf einem Tisch, dass der user A angemeldet ist oder nicht, kennzeichnen Sie das Abmelden, vielleicht letzte Benutzerinteraktion, um ein Timeout zu haben, usw.

Angenommen, der Benutzer A ist angemeldet, dann öffnen Sie für diesen Benutzer ein Flag in der Datenbank, das jetzt angemeldet ist, und wenn Sie versuchen, sich erneut anzumelden, halten Sie ihn draußen. Zu machen Bei dieser Arbeit müssen Sie entweder Ihren Benutzern mitteilen, dass sie sich abmelden möchten, oder eine Auszeit beibehalten, ähnlich wie bei den Anmeldeinformationen.

1
Aristos