Nur eine gleichzeitige Anmeldung pro Benutzer in Asp.net
ist es möglich, dass nur eine gleichzeitige Anmeldung pro Benutzer in Asp.Net web-Anwendung?
Arbeite ich an einer web-Anwendung, in die ich will, um sicherzustellen, dass website lassen nur eine Anmeldung pro Benutzer . Wie um zu überprüfen, dass der aktuelle Benutzer bereits eingeloggt oder nicht .
vorschlagen korrekten login-Methode, durch die wir behandeln dieses problem . Ich denke, wir sollten die Verwendung von sql server-Sitzungsstatus, dieses problem zu behandeln . was schlagen Sie vor ?
Dachte ich eine Lösung für Sie . ich weiß nicht, ob es die richtige ist oder nicht . wir können etwas tun :
- Beim user-login in das system, dann setzen wir session-id in der Spalte Benutzer . (wir verwenden Datenbank-Sitzung, so dass wir bekommen können, alle session-bezogenen Daten wie isexpired , expiredatetime etc problemlos).
- Beim gleichen user loggen Sie sich ein zweites mal, dann schauen wir für die session-id-Spalte und überprüfen Sie, dass die Sitzung bereits abgelaufen ist oder nicht . falls die session nicht abgelaufen ist, dann wird nicht zulassen, Benutzer, um sich einzuloggen .
- Update-Benutzer-session-ID jedes mal, wenn Benutzer sich Abmelden .
Bitte hin, dieses richtige Weg ist oder nicht.
wir erstellten login-Formular und machte store-Prozedur, um zu überprüfen, Benutzer-login-Informationen . haben wir nicht eine Mitgliedschaft bietet .
sparen
isLoggedIn
Eigentum und wenn Sie authentifizieren erhöhen, um 1
beim logout auf 0
, wenn die Sitzung endet, in der Zwischenzeit müssen Sie auf alle zurücksetzen Membership
verwendet LastLoginDate
und Sie können spielen ein bisschen mit.InformationsquelleAutor Hiren Dhaduk | 2013-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bitte an:
Wenn die gleiche Benutzer-ID anzumelden versucht, auf mehreren Geräten, wie beende ich die Sitzung auf dem anderen Gerät?
Out of the box .NET bietet keine Unterstützung für diese. .NET ermöglicht die gleichzeitige log-ins, wie ich bin sicher, Sie sind sich dessen bewusst.
Hatte ich das gleiche genaue Anforderung und kam mit einem ziemlich glatten Lösung, gezeigt in den obigen link. Kurz gesagt, meine Aufgabe war nur von einem Benutzer-log-in auf einmal passiert. Wenn die gleiche Benutzer-ID versucht einzuloggen anderswo, dann tötete er die Sitzung für das erste log-in, indem Sie für eine vorhandene log-in unter einem anderen Session-ID (dies aktiviert die Benutzer-ID angemeldet sein, die von mehreren Instanzen des web-browser auf Ihrem computer [gleiche Session-ID], das ist üblich, aber nicht von einem anderen computer aus [verschiedenen Session-ID] (möglicherweise, weil jemand gestohlen hat, Ihre Anmeldeinformationen, zum Beispiel)). Durch änderung des Codes wahrscheinlich kann man das Verhalten ändern kann - d.h., verhindern, dass die zweite log-in-Versuch, statt töten die erste Anmeldung ist bereits aktiv und im Einsatz.
Natürlich kann es nicht passen 100% zu dem, was Sie benötigen, so fühlen sich frei, es zu ändern, um Ihren Bedarf zu passen.
InformationsquelleAutor Mike Marks
Erstellen Sie eine cache-Eintrag pro Benutzer und speichern Sie Ihre session-ID. Session-ID wird einmalig pro browser-Sitzung. In Ihrem login-Seite, die Sie erstellen können, dass der cache-Eintrag, wenn Sie erfolgreich login:
(Code-eingegeben in die textbox ohne syntax-check. Davon ausgehen, dass "pseudo-code".)
In global.asax können Sie Haken Sie dann in der Session_End und verfallen, die cache Eintrag des Nutzers. Dies sehen für die Globale.asax Veranstaltungen.
Cache
stattApplication
? Oder einfach nur für Globale statischeDictionary
.Cache verwaltet und besser gemacht werden kann, die synchronisiert werden sollen in web-Farmen oder mehrere threads mit load-balancing, etc. Die anderen (statischen oder Anwendung) sind nur im Prozess und wird nicht garantieren ein singleton-Objekt in diesen Fällen. Aber, wenn der Fall ist, ist es nicht mehr notwendig, die Sie verwenden können, eine statische dictionary-oder application-Objekt.
Cache nicht verteilt, nur in web-server, nicht in der Serverfarm. Verteilte cache ist für alle Serverfarm.
Du hast Recht. Ich dachte, der Sitzungsstatus. Caching wird nicht verteilt. Ich muss es wissen. Ich habe verwendet, memcached und andere Lösungen, um dieses Problem zu umgehen. 🙁 Haben ein Klondike-bar!
Sie können einen verteilten cache-Lösung wie memcached.org. Dann in meiner Antwort, alles ersetzen verweisen auf "Cache" mit memcached. Oder als alternative, wie die anderen Antwort sagte, Sie können eine Tabelle verwenden, um es zu verwalten, aber seien Sie vorsichtig, wenn Sie eine high-traffic-website. Sperren/Sperrung könnte zu einem Problem werden. Memcached oder ähnliches ist wahrscheinlich eine bessere Leistung Weg, es zu tun, erfordert jedoch mehr setup. Klondike-bar ist ein Eis-Behandlung in den USA. Ihre Werbespots zeigen, jemand etwas gutes tut, und dann sagt "Gib, dass der Mensch ein Klondike-bar!"
InformationsquelleAutor Tombala
Könnte man hinzufügen, eine flag-Spalte in der user-Tabelle, der angibt, dass ein Benutzer, der derzeit angemeldet ist.
Wenn ein Benutzer versucht, sich in Sie überprüfen die Flagge, wenn es ist wahr (das Benutzer-Konto ist bereits derzeit genutzt), dann sollte man nicht zulassen, dass der neue Benutzer anmelden, wenn das flag false ist, wird der Benutzer sich einloggen darf, da es account nicht von jemand anderem verwendet zu diesem Zeitpunkt.
Sich aber bewusst sein, es sei denn, der verwendet aktiv abmeldet, wissen Sie nicht, wenn sich der Benutzer bewegt sich auf etwas anderes (geht zur anderen website oder den browser schließt, etc.) so müssen Sie irgendeine Art von session-timeout zum automatischen log-out der Benutzer, wenn es keine neuen Anfragen innerhalb einer bestimmten Frist.
Dies bedeutet, dass, wenn ein Benutzer schließt seinen/Ihren browser und versuchen, sich auf einem mobilen Gerät, zum Beispiel, wird er/Sie sich nicht anmelden, bis die von Ihnen angegebene session-timeout abgelaufen ist, so geben Sie das timeout ein bisschen Gedanken, wie Sie nicht möchten, dass der Benutzer ausgeloggt werde zu schnell (wenn er/Sie liest eine lange Seite, etc.) und Sie nicht möchten, dass die Benutzer sich nicht anmelden auf einem anderen Gerät für Stunden, wenn er/Sie vergaß das ausloggen vor verlassen des Hauses.
Einschränkungen: global statisch nicht funktionieren würde, in web-farm-Szenarien. wenn die Sitzungen sind klebrig, noch eine session gestartet werden konnte und wenn es "klebt" auf einem anderen server in der farm, die beide zulässig wäre. ohne sticky-sessions, die Globale Statik würde nicht aktualisiert werden, auf den anderen Servern. die Globale Statik müsste auch isoliert werden vor race conditions, vor allem, wenn die Anwendung ist anfällig für "land-grab" login überspannungen, wo eine Flut von Benutzer müssen/wollen, um sich in in der gleichen Zeit (z.B. hot-event-ticket-Registrierung startet zur angegebenen Zeit)
InformationsquelleAutor Markus-ipse
Die Anmeldedaten sind auf dem cookie gespeichert, so zu wissen, ob der Benutzer angemeldet ist, müssen Sie halten diese Informationen auf dem server, bevorzugt auf einer Datenbank, weil die Datenbank kann nur von gemeinsamen Platz unter web Garten-oder web-farm.
Was Sie halten kann, wird auf einem Tisch, dass die
user A
angemeldet ist oder nicht, die Flagge es ist abgemeldet, vielleicht Letzte Interaktion mit dem Benutzer ein timeout, etc...Also lassen Sie uns sagen, dass der Benutzer A angemeldet ist, dann öffnen Sie ein flag in der Datenbank für diesen Benutzer ist nun angemeldet, und wenn, ist zu versuchen, wieder angemeldet, Sie halten ihn aus.
Um diese Arbeit zu machen müssen Sie entweder sagen, um Ihre Nutzer zu melden oder zu halten eine Zeit, ähnlich wie die Zeit, aus der Anmeldeinformationen.
InformationsquelleAutor Aristos
Wenn Sie mithilfe von identity-system dieser link wird Ihnen helfen, wie man im single-user-login über mehrere Geräte.
Verhindern, dass Mehrere Logins in Asp.Net Identität
Ich habe versucht, Sie funktionieren in meinem Asp.net Mvc-Projekt.
SecurityStamp
jedes mal, wenn eine Anfrage gestellt wird.InformationsquelleAutor Hamza Shafiq