0

私は、.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 メソッドに追加する必要がありますか?)

4

3 に答える 3

2

これを行うには、クライアント側のスクリプトを使用する必要があると思います。Session_End が発生するという事実にもかかわらず、Web サーバーは、ユーザーが最初に何らかのアクションを実行する (つまり、リクエストを送信する) ことなく、セッション タイムアウト メッセージをブラウザーに実際に伝えることはできません。 .

于 2010-04-27T02:11:07.583 に答える
1

さらに簡単なのは、Html メタ タグ "refresh" を使用することです。次の行は、ページが読み込まれてから 5 分後に発生します。

<meta http-equiv="refresh" content="300;url=http://domain.org/Logout.aspx" />

多分これはあなたが必要とするものです。

于 2010-07-18T13:49:08.753 に答える
1

javascript の setTimeout 関数のようなものです。

たとえば、ページのオンロード機能

setTimeout("リダイレクト()", 1500000); //25 分のタイムアウト

ページに AJAX がある場合は、タイムアウトをクリアして、新しいコンテンツが読み込まれたときに最初からやり直す必要があります。

于 2010-07-16T12:29:09.413 に答える