1

私の問題に似ているが、十分に近くない問題を説明している記事を見つけました。あるユーザーが別のユーザーのセッションにアクセスして、セッションに保存されている情報の一部が表示されるという、非常に断続的な問題があります。これが私のシナリオです。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 は単純にオブジェクトから直接オブジェクトを返します。セッション状態に問題はありません。

4

1 に答える 1

4

Web ファーミング シナリオでは、インプロセス セッションから離れる必要があります。が一意であることを確認するには、プロセス外のセッション ストアを使用する必要がありますSession ID

ASP.NETSession IDは、ブラウザの Cookie コレクションに保存します。ユーザーが同じセッションを持っている場合、Session IDサーバーには同じセッションが表示されます。別のサーバーを使用したり、同じサーバー上でワーカー プロセスを使用したりすると、この種のSession ID衝突が発生する可能性があります。

ASP.NET でサポートされているさまざまなセッション状態モードの詳細については、MSDN から入手できます。

于 2012-07-05T21:44:38.053 に答える