ASP.Netセッションはキャッシュに保存されます。メモリが不足している場合は、ダンプされます。セッションを保持するには、データベースまたはその他のストレージにセッションを保存する必要があります。関連するリンクを見つけようとします。セッションは、大量のデータを保存するためのものではありません。
これは、アウトプロセスセッションの使用方法を説明するリンクです。基本的に、ASP.Net / IISはインプロセスセッション(最速)を使用しますが、IISを実行しているサーバーの電源/ストレージによっても制限されるという考え方です。別の方法は、セッションステートファームまたはSQLサーバーを使用してセッションを格納することです。これらは少し遅いですが、より多くの柔軟性を提供します。セッションをシリアル化して決定する機能を考慮する必要があります。
これは私が読んでいる本からの抜粋です(DinoEspositoによるProgrammingMicrosoft ASP.NET 3.5):
セッション状態が失われることがあるのはなぜですか?
動作モードがInProcの場合、セッション状態は、ページ要求が処理されているAppDomainのメモリ空間にマップされます。これに照らして、セッション状態はプロセスのリサイクルの対象となり、AppDomainが再起動します。第2章で説明したように、ASP.NETワーカープロセスは定期的に再起動され、平均的な良好なパフォーマンスを維持します。これが発生すると、セッション状態が失われます。プロセスのリサイクルは、メモリ消費の割合と、処理されるリクエストの数によって異なります。プロセスは循環的ですが、サイクルの間隔に関して一般的な考慮を行うことはできません。セッションベースのインプロセスアプリケーションを設計するときは、このことに注意してください。原則として、セッション状態にアクセスしようとすると、セッション状態が表示されない場合があることに注意してください。
ナレッジベースの記事Q316148で、Microsoftは、一部のウイルス対策ソフトウェアがweb.configまたはglobal.asaxファイルを変更済みとしてマークしている可能性があることを示唆しています。これにより、新しいアプリケーションが開始され、その後、セッション状態が失われます。これは、あなたまたはあなたのコードがそれらのファイルのタイムスタンプを変更する場合にも当てはまります。また、Binディレクトリに追加したり、Binディレクトリから削除したりすると、アプリケーションが再起動します。
注:実行中のページでエラーが発生すると、セッション状態はどうなりますか?現在の辞書は保存されますか、それとも単に失われますか?リクエストの最後にページでエラーが発生した場合、つまりサーバーオブジェクトのGetLastErrorメソッドが例外を返した場合、セッションの状態は保存されません。ただし、例外ハンドラーでServer.ClearErrorを呼び出してエラー状態をリセットした場合、セッションの値は、エラーが発生しなかったかのように定期的に保存されます。