2011-12-06 2 views
1

私のウェブアプリケーションのグローバル変数は値を失うだけでなく、セッション変数も失われます。 Web設定ファイル<sessionState timeout="60" />に設定しました。これは私のローカルホスト上にありますが、私はこれをWebサーバーにまだ置いていませんが、これが原因かもしれませんか?asp.netグローバル変数とセッション変数は5-15分後に値が失われます

+0

ウェブでてsessionStateのタイムアウトは何ですか設定?それは多くの時間の非アクティブが過ぎた後に文脈を失うだろう。 – Matt

+1

グローバル変数は使用しないでください。複数のリクエストが同時にそれらに触れることができます。つまり、複数の異なるユーザーが同時にそれらに触れることができます。 –

答えて

2

inprocセッション状態で、アプリケーションプールがリサイクルまたはシャットダウンすると、セッション情報はなくなります。アプリプールのリサイクルがいつ行われるかについてiis設定を確認してください。私は20分の非アクティブ後に、アプリケーションプールをシャットダウンするデフォルトがあると思う。これが起こる他の多くの理由があります。あなたのアプリケーションプールの寿命を超えて生きるためにセッションが必要な場合は、それをprocから取り出して、状態サーバーやデータベースなどのカスタムで実行する必要があります。

+0

私はWindows 7コンピュータをどこに持っていますか? – user516883

+0

iisマネージャを開きます(最も簡単な方法は、Windowsキーを押して、iisの入力を開始することです。リストに表示されます)。マシン名の下の左側のツリービューに、アプリケーションプールのノードが表示されます。それをクリックすると、右側のリストビューにアプリプールが表示されます。あなたのアプリケーションプールをクリックし、右の詳細設定...リンクをクリックしてください。プライベートメモリLmiit(KB)、アイドルタイムアウト(分)、要求制限、通常の時間間隔(分)などが表示されます。これらはアプリケーションプールのリサイクルを制御します。 –

+0

ローカルホストを使用している場合は、管理ツールのどこにでも表示されません。 – user516883

1

IISで実行される場合は、Regular Time Interval (minutes)またはIdle Time-out (minutes)の値を低く設定しますか。これらの設定は、アプリケーションプールのAdvanced Settings...にあります。

0

これはあなたの問題を解決しないかもしれませんが、あなたは、セッションが実際にタイムアウトしたりしていないかどうかを判断するために、ページののOnInitに以下を追加することができます。

override protected void OnInit(EventArgs e) 
{ 
    // Initialize the base Page class. 
    base.OnInit(e); 
    //If the session exists 
    if (Context.Session != null) 
    { 
     // IsNewSession indicates the session has been reset or the user's session has timed out. 
     if (Session.IsNewSession) 
     { 
      // new session, check for a cookie. 
      string cookie = Request.Headers["Cookie"]; 
      // If there is a cookie does it contain ASP.NET Session ID? 
      if ((null != cookie) && 
       (cookie.IndexOf("ASP.NET_SessionId") >= 0)) 
      { 
       // Since it's a new session but an ASP.NET cookie exists, the session has expired. Notify the user. 
       throw new Exception("Your session has timed out. "); 
      } 
     } 
    } 
} 
関連する問題