我们正在跟踪应用程序上的用户,并希望在他们注销或会话超时时将其计时。注销没有问题,会话超时约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,请为这些用户计时。这看起来是否合理,听起来像是一种合理的做法?感谢。