7

IIS の異なる仮想ディレクトリに 2 つの同一のアプリケーションをセットアップしています (両方のアプリケーション名が同じになるようにいくつかの回避策を実行しました)。2 つの asp.net Web アプリケーションでセッション ID を共有する方法はありますか?

StateServer にセッションを保存しているので、両方とも同じセッション データを取得する必要がありますが、アプリケーション a からアプリケーション b に移動するたびに、異なるセッション ID が作成されます。これは、負荷分散のシナリオでも発生しませんか? www.test.com にアクセスすると、そのリクエストはサーバー a にリダイレクトされ、もう一度ヒットするとサーバー b にリダイレクトされますが、別の Web アプリケーションであるため、新しいセッション ID が作成されます。 ?

4

3 に答える 3

7

最初に、両方のアプリで cookieName="SOME_COOKIE_NAME_HERE" を使用するように web.config の sessionState 要素を構成します。

次に、URL が同じ TLD (トップレベル ドメイン)、つまり app1.mydomain.com と app2.mydomain.com を持っていることを確認してください。Global.asax で Session_Start イベントを処理し、次のコードを挿入できるはずです。

    HttpCookie cookie = new HttpCookie("SOME_COOKIE_NAME_HERE", Session.SessionID.ToString());
    cookie.Expires = DateTime.Now.AddMinutes(20);
    cookie.Domain = "*.mydomain.com";
    cookie.HttpOnly = true;
    Response.SetCookie(cookie);

また、SqlServer SessionState モードを使用することをお勧めします。

于 2010-07-09T19:18:37.297 に答える
1

最初は同じ問題に直面しました。私がしたことは、各ドメインの jsession ID を上書きすることです。つまり、ユーザーが domain1.com にアクセスした場合、iframe から domain2.com に同じセッション ID を設定します。およびその逆。これにより、複数のドメイン間で同じセッションを維持できます。

ロードバランサーを使用して、ネットワーク上の複数のサーバーで影響をテストする必要があります。

于 2013-07-23T10:03:21.680 に答える
-1

セッションIDだけでなく、2つのアプリケーション間でセッション状態を共有することを目標としていますか?StateServerはSessionIDだけでなくアプリケーションパスも使用してデータを保存していると思います。そのため、SessionIDが同じであっても、データを共有することはできません。独自のセッションモジュールを作成する必要がある場合があります。

アプリケーションパスはクラスターメンバー間で同じであるため、負荷分散Webアプリにはこの問題はありません。

于 2010-07-09T19:13:21.030 に答える