私は、.NET asp/C# コードを利用した Web サイトに取り組んでいます。クライアントは、セッションに 25 分のタイムアウトが必要です。ただし、サイトが使用されている場合があり、ユーザーは長時間 (25 分以上) 接続したままになります。Session_End がトリガーされます。
protected void Session_End(Object sender, EventArgs e)
{
Hashtable trackingInformaiton = (Hashtable)Application["trackingInformation"];
trackingInformaiton.Remove(Session["trackingID"]);
}
ユーザーはしばらくして戻ってきますが、Web サイトを操作するとエラーが発生し、次の電子メール通知が届きます。
ユーザー: 認証されていないユーザー
エラー: System.Web.HttpException
説明: ビューステートの読み込みに失敗しました。ビューステートが読み込まれるコントロール ツリーは、前の要求でビューステートを保存するために使用されたコントロール ツリーと一致する必要があります...
スタック トレースのわかりやすい部分はSystem.Web.UI.Control.AddedControl
. どうやら、サーバーはセッション データを破棄し、新しいデータを送信していますが、クライアントは古いデータを処理しようとしています。したがって、エラー"the control tree into which viewstate is being loaded [doesn't] match the control tree that was used to save the viewstate during the prevoius request."
そこで質問です。接続がタイムアウトしたときに、ユーザーのブラウザに「ログアウトしています」画面にリダイレクトするよう強制するにはどうすればよいですか? (Session_End メソッドに追加する必要がありますか?)