ここでの問題は、各サーバーがメモリ内に独自のセッション状態を維持し、他のサーバーで作成されたセッションについて認識していないことです。
これを回避するには、デフォルトのInProcセッション状態プロバイダーを使用する代わりに、StateServerまたはSQLServerセッション状態プロバイダーを使用する必要があります。
これを行うには、ASP.NET状態サービスがサーバーの1つで実行されていることを確認してから、アプリケーションのweb.configファイルのsystem.webセクションに次の構成アイテムを追加して置き換える必要があります。 ASP.NET状態サービスを実行しているサーバーの名前が付いた「SampleStateServer」:
<sessionState mode="StateServer"
stateConnectionString="tcpip=SampleStateServer:42424"
cookieless="false"
timeout="20"/>
これに関するMicrosoftのドキュメントは、http://msdn.microsoft.com/en-us/library/ms178586.aspxで入手できます。
これをWebファームで実行しているため、両方のサーバーのWebアプリケーションが同じ暗号化キーを使用していることも確認する必要があります。
このためには、web.configにmachineKeyエントリを設定する必要があります。これには、web.configのsystem.webセクションに次のようなエントリを追加することが含まれます。
<machineKey validationKey="4D0590A0E4DE163BAD0EEEB6747467D770CD5FB2EA95BF02B27787A45CA579DECB01E2A1F16563DBAB44C1C0E54C7E53D65F2A7D0FDF378F4D3702B3F2C8B165" decryptionKey="928771D7B1B8C32608F56AC428EC5902985F6FB2E6E9A78733B6EAA493FA13F5" validation="SHA1" decryption="AES" />
あなたのために鍵を生成するいくつかのウェブサイトがあります。私は通常http://aspnetresources.com/tools/machineKeyを使用します
代わりにSQLStateプロバイダーを使用する場合は、http://msdn.microsoft.com/en-us/library/ms178586.aspxのページの[SQLServerモード]セクションにすべての構成情報があります。状態を保存するデータベースを構成する必要があるため、その設定は少し複雑です。