Frage

In ASP.NET, ich bin auf der Suche nach einer Möglichkeit, einen Benutzer zu verlassen meine Anwendung zu prüfen. Um genau zu sein, würde Ich mag einen ‚Logout‘ Datensatz in einer Audit-Tabelle in SQL Server einzufügen, wenn die Sitzung des Benutzers wird aufgegeben / zerstört aus irgendeinem Grunde (nicht unbedingt wegen eines Aufrufs Session.Abandon)

Ich habe eine 'SessionHelper' Klasse, die die Session-Setter / Getter verwaltet.

Ich habe versucht Entsendung in Session_End in Global.asax zurück, aber es gebrannt nie diese Veranstaltung auch nach der Timeout abgelaufen.

Ich habe versucht, ‚finalisieren‘ in der SessionHelper Klasse überschreibt und es dort zu tun, wenn die Klasse zerstört wird, aber es hat nicht das Ereignis Feuer auch nicht.

Ich würde versuchen, IDisposable in den SessionHelper Umsetzung, aber ich weiß nicht, wo es zu nennen, so dass es immer aufgerufen wird.

Was ist der richtige Weg, um einen Benutzer zu verlassen ASP.NET-Anwendung zu überprüfen?

Danke!

War es hilfreich?

Lösung

Das Session_End Ereignis nur ausgelöst wird, wenn Sie InProc Sitzungen haben. SQL oder State-Server-Session-Management wird dieses Ereignis nicht ausgelöst. Wenn Sie können, zu InProc Sitzungen zurück und dieses Ereignis verwenden.

Abgesehen davon, dass Sie nicht sehr gute Lösungen bekommen. ASP.NET bietet keine Möglichkeit, an der aktuellen Liste der Sitzungen auf dem Server zu sehen (zumindest keine Möglichkeit, dass die Nutzer von Stackoverflow kannten, da ich bereits die Frage gestellt), so dass Sie nicht einen Job verwenden überprüfen, wenn sie zerstört werden.

Die zweitbeste Lösung wäre es, eine „letzte Zugriffszeit“ irgendwo für die Benutzer gespeichert hat und verwendet einen Timeout der Sitzung zu erkennen. Die Umsetzung eines solchen Job ist kompliziert, obwohl (Sie Abmelde-Ereignisse, wenn sich ein Benutzer anmeldet in / out schnell zum Beispiel verfehlen) ...

Also keine perfekte Lösung.

Andere Tipps

Beachten Sie, dass über den „richtigen Weg“, aber hier ist, wie ich es in der Vergangenheit getan haben.

Haben Sie einen „aktiv“ Datum-Zeitstempel mit dem Benutzerdatensatz zugeordnet ist, in der Datenbank. Jedesmal, der Benutzer greift auf eine Seite, die auf die aktuelle Zeit aktualisiert wird. Wenn jemand die Seite in etwa 15 Minuten nicht zugegriffen hat, dann wird der Benutzer als „Logout“ Ereignis aufgezeichnet, und der Zeitstempel auf NULL gesetzt.

Am besten Ihr Abmelde Rekord wird eine intelligente Vermutung sein, auch wenn Sie die Sitzung Events tun richtig zu arbeiten, der, wenn der Benutzer Ihre Website / app links. Eine Technik, die Sie verwenden könnten, ist die Abmeldezeit in die db zu platzieren, wenn der Benutzer anmeldet, und hält nur den Datensatz mit einem zukünftigen Zeitpunkt zu aktualisieren, da sie das System nutzen. Hier ist das allgemeine Schema einer Sitzungstabelle verwenden ich kürzlich verfassten:

[Id]  [Uid]    [LoginInOn]        [ExpiresOn]  
 1    johndoe  10/14/2008 10:47   10/14/2008 11:07  

In dieser Tabelle sind nur die Aktualisierung Ich halte die ExpiresOn Spalte als der Benutzer interagiert mit der Anwendung (aktuelle Zeit + 20 Minuten). Wenn sie versuchen, nach dem ExpiresOn zu interagieren, dann weiß ich, sie für 20 Minuten im Leerlauf waren und ein neues Login erzwingen. Für Berichtszwecke weiß, dass ich der Benutzer abgemeldet hat, wenn die aktuelle Zeit größer ist als ExpiresOn ist. Sie können komplexer als diese. Zum Beispiel bewege ich meine Daten aus der Sitzungen Tabelle oben zu einer Berichtstabelle mit einem regelmäßigen Prozess aufgeführt. Dies ist nur die Sitzungen Tisch klein zu halten, da viele Sachen mit ihm interagiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top