アプリケーションでユーザーの時間を追跡しており、ユーザーがログアウトするか、セッションがタイムアウトしたときに、ユーザーを記録したいと考えています。ログアウトは問題なく、セッション タイムアウトは約 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);
}
}
すべてのアクティブなセッションについて 10 分ごとに Web サーバー (IIS 7) をポーリングし、それをデータベースに格納されているセッション ID と比較する Web サービスをセットアップすることを考えています。Web サーバーからのリストにないすべてのセッション ID について、それらのユーザーを退出させます。それはもっともらしく、合理的なアプローチのように聞こえますか? ありがとう。