それはうまく動作します。はい、クラスは静的である可能性がありますが、メモリのさまざまなセクションにアクセスするため、ここから競合が発生することはありません。
内部的には、Session は一意のキー (現在のセッション ID だと思います) を使用して辞書からデータを保存および取得するという事実を除いて、Session は Cache とまったく同じように機能すると思います。したがって、Session["Foo"]= "Bar" を保存すると、実際には Session[session_id+"Foo"] = "Bar" が実行されます。
アップデート
私の仮定は準確認されています:
状態プロバイダーの比較 既定では、ASP.NET アプリケーションはセッション状態をワーカー プロセスのメモリ、特に Cache オブジェクトのプライベート スロットに格納します。InProc モードが選択されている場合、セッション状態は Cache オブジェクト内のスロットに保存されます。このスロットはプライベートとしてマークされており、プログラムからアクセスすることはできません。別の言い方をすれば、ASP.NET データ キャッシュ内のすべての項目を列挙すると、特定のセッションの状態のように見えるオブジェクトは返されません。Cache オブジェクトは、プライベートとパブリックの 2 種類のスロットを提供します。プログラマーは公開スロットを追加および操作できます。システム、特に system.web アセンブリで定義されたクラスは、それ自体のためにプライベート スロットを予約します。アクティブな各セッションの状態は、キャッシュ内のプライベート スロットを占有します。スロットの名前はセッション ID にちなんで付けられ、値は、SessionStateItem という名前の文書化されていない内部クラスのインスタンスです。InProc 状態プロバイダーは、セッションの ID を受け取り、キャッシュ内の対応する要素を取得します。次に、SessionStateItem オブジェクトのコンテンツが HttpSessionState ディクショナリ オブジェクトに渡され、Session プロパティを介してアプリケーションからアクセスされます。ASP.NET 1.0 のバグにより、Cache オブジェクトのプライベート スロットがプログラムで列挙可能になることに注意してください。ASP.NET 1.0 で次のコードを実行すると、現在アクティブな各セッションの状態がパックされたオブジェクトに対応するアイテムを列挙できます。次に、SessionStateItem オブジェクトのコンテンツが HttpSessionState ディクショナリ オブジェクトに渡され、Session プロパティを介してアプリケーションからアクセスされます。ASP.NET 1.0 のバグにより、Cache オブジェクトのプライベート スロットがプログラムで列挙可能になることに注意してください。ASP.NET 1.0 で次のコードを実行すると、現在アクティブな各セッションの状態がパックされたオブジェクトに対応するアイテムを列挙できます。次に、SessionStateItem オブジェクトのコンテンツが HttpSessionState ディクショナリ オブジェクトに渡され、Session プロパティを介してアプリケーションからアクセスされます。ASP.NET 1.0 のバグにより、Cache オブジェクトのプライベート スロットがプログラムで列挙可能になることに注意してください。ASP.NET 1.0 で次のコードを実行すると、現在アクティブな各セッションの状態がパックされたオブジェクトに対応するアイテムを列挙できます。
ソース: http://msdn.microsoft.com/en-us/library/aa479041.aspx
(フォーマット失礼します。携帯からの投稿です)