Как отслеживать время последней активности пользователя с помощью Microsoft.AspNet Identity

#asp.net-mvc #c#-4.0 #asp.net-identity-2

#asp.net-mvc #c #-4.0 #asp.net-identity-2

Вопрос:

Итак, я расширил класс пользователя по умолчанию как ;

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

И у меня есть способ обновить активность пользователя

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

Моя цель здесь — отслеживать время последней активности пользователей. Под временем последней активности я подразумеваю время, когда пользователь в последний раз выполнял какие-либо действия в приложении.

Я планировал вызывать метод обновления после выполнения каждого запроса. Однако это означает выполнение обновления базы данных для каждого запроса. Для меня это звучало дорого.

Вопрос: где мне это вызвать? Есть ли лучший способ отслеживать последнюю активность пользователя?

С уважением,

Ответ №1:

Вы могли бы использовать событие OnActionExecuted внутри контроллера, чтобы отслеживать активность пользователя и записывать журнал активности для всех пользователей в объект всего приложения с помощью HttpContext.Application . Чтобы снизить трафик к вашей базе данных, вы могли бы реализовать глобальный фоновый поток, который считывает локальные сохраненные данные об активности и записывает их в вашу базу данных через определенное время (например, раз в минуту).

У вас было бы меньше трафика базы данных, но данные об активности не были бы актуальными на 100%. В зависимости от вашего цикла обновления базы данных.

Комментарии:

1. Звучит намного лучшим решением. Будет сделано таким образом. Спасибо.