この記事は、InProc セッション状態モードを使用するとセッション データが失われるという問題 ASP.NET 解決するのに役立ちます。
元の製品バージョン: ASP.NET
元の KB 番号: 324772
現象
ASP.NET Web アプリケーションのセッション データは、InProc セッション状態モードではランダムな間隔で失われるように見えます。
原因
AppDomain
クラスまたはAspnet_wp.exe プロセス (または IIS 7.0 以降のバージョンで実行されるアプリケーションのW3wp.exe プロセス) がリサイクルされた場合、セッション状態データは失われます。 一般に、 AppDomain
はいくつかの要因に基づいて再起動されます。
- 構成ファイルの
<processModel>
セクションには、さまざまな属性 (memoryLimit
属性など) に特定の設定があります。 - Global.asax または Web.config ファイルが変更されました。
- Web アプリケーションの
Bin
ディレクトリが変更されました。 - ウイルススキャンソフトウェアは、いくつかの .config ファイルに触れました。
InProc セッション モードは、セッション状態がローカルに格納されることを示します。 つまり、InProc セッション状態モードでは、有効期間オブジェクトとして Web アプリケーションの AppDomain
に格納されます。 このため、Aspnet_wp.exe (または IIS で実行されるアプリケーションの場合はW3wp.exe) または AppDomain
が再起動すると、セッションの状態が失われます。
解決方法
この問題を回避するには、StateServer または SqlServer セッション状態モードを使用します。 ASP.NET は、セッション状態データを格納するための他の方法を提供します。 StateServer モードと SqlServer モードでは、セッション状態は Web アプリケーションの AppDomain
に格納されません。
Note
要件に適したモードを決定するときは、各セッション状態モードに関連付けられている動作と問題を理解することが重要です。
状態
この動作は仕様によるものです。
関連情報
セッション状態管理 ASP.NET およびその他の関連情報の詳細については、「 Session State」を参照してください。