2

我们正在对应用程序上的用户进行时间跟踪,并希望在他们注销或会话超时时将他们打卡。注销没有问题,会话超时在大约 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,请让这些用户退出。这是否合理,听起来是否合理?谢谢。

4

0 回答 0