如何使用Microsoft.AspNet标识跟踪用户上次活动时间

时间:2016-10-21 06:23:22

标签: asp.net-mvc c#-4.0 asp.net-identity-2

所以我将默认的User类扩展为;

[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);
 }

我的目的是跟踪用户的上次活动时间。上次活动时间是指用户上次对应用程序执行任何操作的时间。

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

问题:我应该在哪里打电话?有没有更好的方法来跟踪用户上次活动?

此致

1 个答案:

答案 0 :(得分:0)

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

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