0

セッション タイムアウトを設定している Asp.net アプリで問題が発生しており、一定の時間が経過してもセッションの有効期限が切れていません。このアプリには SQL Server 2008 バックエンド データベースがあり、そこにこのアプリのセッション タイムアウト値を保存しています。現在、テスト目的で 3 分に設定しています。Global.asax の Session_Start には、次のものがあります。

// Set the timeout
int timeout = GetSessionLength();
this.Session.Timeout = timeout;

また、GetSessionLength()セッション タイムアウトについてデータベースにクエリを実行した後、整数値を返す関数です。

次に、サイトのマスター ページの Page_Load には、次のように表示されます。

System.Web.UI.HtmlControls.HtmlMeta hmRefresh = new System.Web.UI.HtmlControls.HtmlMeta();
hmRefresh.HttpEquiv = "Refresh";
hmRefresh.Content = (this.Session.Timeout * 60).ToString();
Page.Header.Controls.Add(hmRefresh);

これにより、タイムアウトになるとページが自動的に更新されます。これを使用して、私のページは正常に更新されています。ただし、セッションの有効期限が切れたときにヒットする他のコードがありますが、セッションの有効期限が切れていないことが示されているため、ヒットすることはありません。

また、私は自分のコンピューターで別のアプリを開発しており、そのアプリで同じコードを使用してセッションのタイムアウトを検出しており、そのアプリに最適です。ですから、なぜこれがそうではないのかわかりません。

4

1 に答える 1

2

メタリフレッシュの間の同じセッションで、他のリクエストがいくつかあると思います。同じセッション内のすべてのリクエストは、有効期限をスライドさせます。また、セッションの有効期限が切れると同時にリフレッシュを実行しようとするため、メタリフレッシュ時にランダムに期限切れになる/期限切れにならない可能性が高くなります。

デバッグするには、http デバッガー ( Fiddlerなど) を使用し、送信された要求を確認します。

注: SQL セッション状態では、(メモリ内のものとは異なり) 有効期限に関する通知はありません。そのため、SQL/State サービス ケースでセッション状態が期限切れかどうかを知る唯一の方法は、Session オブジェクトが空かどうかを確認することです。Session_End を使用している場合は、Session-State Events を確認してください。

Session_OnEnd イベントは、セッション状態の Mode プロパティがデフォルトの InProc に設定されている場合にのみサポートされます。

于 2012-04-13T16:32:06.860 に答える