2012-04-13 25 views
0

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

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

そしてGetSessionLength()は、セッションタイムアウトのためのデータベースを照会した後、整数値を返す関数です:Global.asaxのでは、SESSION_STARTに私は以下のものを持っています。

 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); 

これは、タイムアウトがヒットされた後に自分自身をリフレッシュするためにページが発生します。

次に、サイトのマスターページでは、Page_Loadの上で、私は次のよう持っています。私のページはこれを使って正常にリフレッシュされています。しかし、私は、セッションが期限切れになるとヒットするいくつかの他のコードを持っていますが、セッションが期限切れにならないことを示すため、決してヒットしません。

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

+1

サーバーによれば、もう少し時間が経過したことを確認するだけの場合はどうなりますか?ロングショット... –

+1

好奇心の念から、あなたはASP.NETがweb.configファイルを使ってこのすべてを管理できることをご存じですか? –

+0

@ ajax81、はい私はそれを非常に認識しています。セキュリティ上の理由から、SQL Serverからこれをリモートで変更できるようにしたいと考えています。選択したセッションの長さが短すぎると、この方法で簡単に変更できます。 –

答えて

1

私は同じセッションでメタリフレッシュの間に他のリクエストがあると思います。同じセッション内のリクエストでは、有効期限が切れます。また、セッションの有効期限が切れた時点でリフレッシュを試みるため、メタリフレッシュ時に無期限に期限切れになる可能性があります。

デバッグするには、httpデバッガ(Fiddlerなど)を使用し、送信されるリクエストを確認します。

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

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

+0

この回答と@AndrewBarberコメントの組み合わせ。セッションのタイムアウトによる奇妙な動作が発生していました。私はリフレッシュ時間を10秒増やしました。それはまだ有効期限が切れていなかったので、私は30秒を試しました。その時までに、タイムアウトしました。有効期限をずらす原因となるリクエストはありませんでした。いずれにしても、リフレッシュ時間を長くすると問題が解決しました。 –