如何使用 Microsoft.AspNet 身份跟踪用户上次 Activity 时间

How to Keep Track User Last Activity Time Using Microsoft.AspNet Identity

所以我将默认用户 class 扩展为 ;

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

我有一个更新用户的方法activity

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

我在这里的目的是跟踪用户的最后 activity 时间。最后 activity 次是指用户最后一次对应用程序执行任何操作。

我打算在每个请求执行后调用更新方法。但是,这意味着为每个请求执行数据库更新。这对我来说听起来很昂贵。

问题: 我应该在哪里调用它?有没有更好的方法来跟踪用户上次 activity?

此致,

您可以在控制器中使用 OnActionExecuted 事件来跟踪用户 activity 并使用 [=10] 将所有用户的 activity 日志写入应用程序范围的对象=].为了保持数据库的流量较低,您可以实现一个全局后台线程,该线程读取本地存储的 activity 数据并在固定时间后(例如每分钟一次)将它们写入您的数据库。

您的数据库流量会减少,但 activity 数据不会 100% 最新。取决于你的数据库更新周期。