2016-10-21 1 views
0

So habe ich die Standardbenutzerklasse als erweitert;So verfolgen Sie die letzte Aktivitätszeit des Benutzers mithilfe der Microsoft.AspNet-Identität

[Serializable] 
public class AUser : IdentityUser<int, AUserLogin, AUserRole, AUserClaim>, IUser , IXmlSerializable 
{ 
    public virtual DateTime LastActivity { get; set; } 
    ... 
    ... 
} 

Und ich habe eine Methode

public async void UpdateUserActivity(string userName) 
{ 
    var user = _userManager.FindByName(userName); 
    user.LastActivity = DateTime.UtcNow; 
    await _userManager.UpdateAsync(user); 
} 

Mein Ziel Benutzeraktivität hier zu aktualisieren, den Überblick über letzte Aktivität Zeit der Nutzer zu halten. Mit der letzten Aktivitätszeit meine ich das letzte Mal, dass der Benutzer eine Aktion für die Anwendung ausgeführt hat.

Ich plante, die Update-Methode nach jeder Anfrage aufgerufen wird. Dies bedeutet jedoch, dass für jede Anforderung eine Aktualisierung der Datenbank ausgeführt wird. Das klang teuer für mich.

Frage: Wo soll ich es nennen? Gibt es eine bessere Möglichkeit, die letzte Aktivität des Benutzers zu verfolgen? mit HttpContext.Application

Grüße,

Antwort

0

Sie können das OnActionExecuted Ereignis in einem Controller verwenden, den Überblick über die Benutzeraktivität zu halten und das Aktivitätsprotokoll für alle Benutzer in eine Anwendung breites Objekt zu schreiben. Um den Datenverkehr auf Ihrer Datenbank niedrig zu halten, könnten Sie einen globalen Hintergrundthread implementieren, der die lokal gespeicherten Aktivitätsdaten liest und diese nach einer festgelegten Zeit (z. B. einmal pro Minute) in Ihre Datenbank schreibt.

Sie hätten weniger Datenbankverkehr, aber die Aktivitätsdaten wären nicht 100% aktuell. Abhängig von Ihrem Datenbankaktualisierungszyklus.

+0

Klingt viel bessere Lösung. Werde diesen Weg machen. Vielen Dank. –

Verwandte Themen