2016-10-21 14 views
0

因此,我已将默认用户类扩展为;如何使用Microsoft.AspNet身份跟踪用户上次活动时间

[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方法。但是,这意味着对每个请求执行数据库更新。这对我来说听起来很贵。

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

问候,

回答

0

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

您将拥有较少的数据库流量,但活动数据不会100%保持最新。取决于你的数据库更新周期。

+0

听起来更好的解决方案。将这样做。谢谢。 –