我有一个自动化系统,我想记录用户登录和注销。因此,我写了一个近乎完美的代码。首先,我用这段代码记录用户登录:
if (UserLog.LoadByUserAndSessionAndLogoutTime(NHibernateHTTPModule.CurrentSession, user, Session.SessionID, null) == null)
{
UserLog userlog = new UserLog();
userlog.LoginTime = DateTime.Now;
userlog.LogoutTime = null;
userlog.User = (Business.Classes.User)Session["User"];
userlog.Session = Session.SessionID;
userlog.IPAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
UserLog.Insert(NHibernateHTTPModule.CurrentSession, userlog);
}
然后,在Global.asax的Session_End事件中,我编写了这段代码;
IList<UserLog> userlogs = UserLog.LoadBySessionAndLogoutTime(NHibernateHTTPModule.CurrentSession, Session.SessionID, null);
foreach (UserLog userlog in userlogs)
{
userlog.LogoutTime = DateTime.Now;
UserLog.Update(NHibernateHTTPModule.CurrentSession, userlog);
}
现在,这个技巧很有效但是当我在一天结束时检查数据库时,我有一些僵尸记录,它们有登录时间但没有注销时间。很明显,对于某些用户来说,Session_End不会触发或发生阻止更新的不同事件。我错过了什么?为什么这不能正常工作?提前致谢。注意:我正在使用NHibernate。
答案 0 :(得分:1)