如何使用 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% 最新。取决于你的数据库更新周期。
所以我将默认用户 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% 最新。取决于你的数据库更新周期。