ASP.NETのセッションタイムアウトについて
ASP.NETアプリケーションでは必要に応じて、実行時の状態(変数の値)を次回のポストバックの為にSessionプロパティに値を格納
していると思いますが、そのセッションのアイドル状態が何分続くと破棄するかを決めているのがセッションタイムアウトです。
セッションタイムアウトは以下のように指定することができます。
指定の仕方で優先が決まります。下位の設定は上位の設定で上書きされます。
単位は「分」です。
優先1:ページへの記述による設定
影響範囲は、そのセッション中。ページ毎に上書きも可。もちろん上書き優先。
aspxに記述 <% Session.Timeout = 120%>
CodeBehind側に記述 Session.Timeout=120
優先2:global.asaxによる設定
影響範囲:そのセッション
Application_Startメソッドに記述
※Session_Startメソッド以降の記述は有効化どうか未検証。試した方教えてください。
Session.Timeout=120
優先3:Web.configによる設定
影響範囲:そのWebアプリケーション
<sessionState mode=”InProc” timeout=”120″/>
modeは、既定値はInProcですが、SQLServerやStateServerなど適宜変更して下さい。
Offはセッション状態無効です。
優先4:Machine.Config
影響範囲:マシン全体
記述はWeb.configと同じ
※WebConfig及びMachine.configの既定の構成
次の既定の <sessionState> 要素は、Machine.config ファイルまたはルートのWeb.configファイルでは明示的に構成されません。
ただし、取得を行うと以下の値が返されます。すなわち既定の構成となっています。
<sessionState
mode=”InProc”
stateConnectionString=”tcpip=127.0.0.1:42424″
stateNetworkTimeout=”10″
sqlConnectionString=”data source=127.0.0.1;Integrated Security=SSPI”
sqlCommandTimeout=”30″
customProvider=””
cookieless=”UseCookies”
cookieName=”ASP.NET_SessionId”
timeout=”20″
allowCustomSqlDatabase=”false”
regenerateExpiredSessionId=”true”
partitionResolverType=””
useHostingIdentity=”true”>
<providers>
<clear />
</providers>
</sessionState>
WebConfig及びMachine.configの既定値で「timeout=”20″ 」となっています。
何も設定しないとセッションが20分で切れるのはこのためです。
※セッション timeout 構成設定は ASP.NET ページだけに適用されます。ASPページは影響しません。
※ちなみに、「Timeout プロパティを、525,600 分 (1 年) を超える値に設定することはできません。」だそうです。