我们正在对应用程序上的用户进行时间跟踪,并希望在他们注销或会话超时时将他们打卡。注销没有问题,会话超时在大约 95% 的时间内有效。但是 5% 的时间要么 Session_End 没有被调用,要么我失去了用户的会话以将他们的用户 ID 传递给数据库以进行打卡。
以下是我在 Global.asax 中的代码:
protected void Session_End(object sender, EventArgs e)
{
var currentUser = Session[Constants.SessionKey_User] as User;
if (currentUser != null)
{
//passes the user id to a db proc
Utilities.LogTimeTrackingEvent(currentUser.UserId, Constants.TimeTrackingEntryTypes.Stop);
}
}
想法是设置一个 Web 服务,每十分钟轮询一次 Web 服务器 (IIS 7) 以获取所有活动会话,并将其与存储在数据库中的会话 ID 进行比较。对于不在 Web 服务器列表中的所有会话 ID,请让这些用户退出。这是否合理,听起来是否合理?谢谢。