自動化システムがあり、ユーザーのログインとログアウトを記録したいと思います。したがって、私はほぼ完璧に機能するコードを書きました。まず、次のコードでユーザーログインを記録します。
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を使用しています。