私の問題に似ているが、十分に近くない問題を説明している記事を見つけました。あるユーザーが別のユーザーのセッションにアクセスして、セッションに保存されている情報の一部が表示されるという、非常に断続的な問題があります。これが私のシナリオです。Application Request Routing と Web Farm Framework を使用して、負荷分散された環境で AbleCommerce を使用しています。インプロセス セッションを使用していますが、スティッキー セッション (クライアント/サーバー アフィニティ) が構成され、機能しています。この問題の原因となっているキャッシングがないことを確認しました (ページ出力キャッシュを使用していない、ARR キャッシングがない、IIS または WAAS キャッシングがない)。セッションに保存された情報は、非常にまれに他の誰かのブラウザーに表示されますが、セッション ベースのシングルトン オブジェクトを介してセッションに保存されます。
例えば:
public class ExampleObject
{
public string ExampleData{get; set;}
public static TicketingSession Instance
{
get
{
if (HttpContext.Current.Session["ExampleObject"] == null)
{
HttpContext.Current.Session["ExampleObject"] = new ExampleObject();
}
return (ExampleObject)HttpContext.Current.Session["ExampleObject"];
}
}
}
そして、他のコードでこれを使用できます:
ExampleObject.Instance.ExampleData = "whatever";
//or
txtSomeTextBox.Text = ExampleObject.Instance.ExampleData;
負荷分散された環境では静的データとインプロセス セッションを避ける必要があることはわかっていますが、クライアント/サーバー アフィニティを使用しており、使用しているこの静的オブジェクトは単なるプロパティであり、getter は単純にオブジェクトから直接オブジェクトを返します。セッション状態に問題はありません。