1

昨日投稿した質問によると、当社の Web サイトの DNS 構造は、文字通り 2 つの運用サーバー間で行ったり来たりするラウンド ロビン DNS に変更されました。web.config両方の製品サーバーには次のものがあります。

  • <sessionState mode="SQLServer" ... >同じ共有DBを指す
  • 2 つの間で一貫している各サーバー上の A machineKey(これが昨日の私の投稿の主なポイントでした)。
  • [更新<forms domain=".mydomain.com" ... >]タグ内の同じドメイン

サイトでログイン機能を使用すると、ログインは実際に、ユーザーを認証する 3 番目の Web サイトに対して Web サービス要求を行います。結果の応答がログインに成功したことを示している場合は、次を使用FormsAuthenticationしてユーザーをログインさせます。

FormsAuthentication.SetAuthCookie(strUserID, true);

私たちの問題は、ログインしているページとログインしていないページがあることです。これは、2 つの本番サーバー間でセッションを共有するための最終ステップを完了していないことを示しているのでしょうか?それとも、SQL サーバー セッション DB が破損している可能性がありますか?

前もって感謝します

更新: ユーザーがログインしているかどうかを判断するコードは非常に基本的です。

HttpContext.Current.User.Identity.IsAuthenticated

更新 2 :

prod1.mysite.com (または prod2.mysite.com) にアクセスすると Cookie が呼び出され"ASP.NET_SessionId"ますが、ライブ パブリック URL www.mysite.com にアクセスすると、この Cookie は取得されません。これは問題の一部ですか?

解決策:

ここで行ったことはすべて正しく、Akamai を使用するライブ サイトは、Akamai のキャッシュ構成により、さまざまな状態でキャッシュされていたことがわかりました。ログイン状態をサーバー間で共有することは確認済みです。

4

1 に答える 1

1

できることの 1 つは、Firefox 用の Firebug アドオンを使用して、ログイン後に期待どおりに認証 Cookie がブラウザに送信されるようにすることです。ケース。
もう 1 つの確認事項は、ドメインが認証 Cookie に対して正しく設定されていること、およびそれが Web サイトのすべてのページで有効であることです。
これは通常、フォーム タグの web.config で設定されます。以下の例は、Web ファーム内の各サーバーで同じである必要があります。

<authentication mode="Forms">
    <forms name="yourAuthCookie" loginUrl="/login.aspx" protection="All" path="/" domain="mydomain.com" timeout="30"/>
</authentication>

これがすべて正しい場合、質問で説明した設定が必要なものをカバーしているように見えますが、サーバー間でセッションが正しく共有されていない可能性があります。

于 2010-10-05T13:17:13.997 に答える