#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. Звучит намного лучшим решением. Будет сделано таким образом. Спасибо.