6

そこで、SQL Server 2008 と一時データベースを使用して SQL Server セッション状態を設定し、今日、ASPStateTempApplications テーブルでこれを見つけるためだけにテーブルのデータを調べることにしました。

AppId AppName
538231025 /lm/w3svc/1/root
611758131 /lm/w3svc/3/root
802488340 /lm/w3svc/4/root
-940085065 /lm/w3svc/4/root/webapp
685293685 /lm/w3svc/5/root
1210055478 /lm/w3svc/5/ルート/webapp

負荷分散された 2 つの Web サーバーがあります。

両方のサーバーの Web アプリの ID を調べると、web1 には ID 4 の app1 があり、web2 には ID 5 の app1 があることがわかります。他のアプリでも同じことが起こります。web1 には ID が 1 の app2 があり、web2 には ID が 3 の app2 があります。

私の常識では、セッション ID が appid を使用するため、Web サーバーはセッションを共有していません。私は正しいですか?もしそうなら、なぜこのマイナーな詳細がドキュメントでそれほど明白ではないのですか? 両方の Web サーバーで ID を一致させる必要がありますか?

4

1 に答える 1

6

AppIdは、SessionIdの作成中に使用され、あるアプリから別のアプリへの衝突を回避するのに役立ちます。これは、IISアプリパスのハッシュを計算することによって作成されます。

ご使用の環境では、フローは次のようになります。

  1. サーバーAはセッションIDを作成し、それをCookieに設定し、対応するセッション(ASPStateTempSessionsの行)にいくつかのデータを格納します。セッションID列は、セッションIDとAppIDを連結することによって作成されます。
  2. サーバーBは、既存のセッションIDを持つ要求を受信し、それを使用してASPStateTempSessionsテーブルから関連するセッションデータを検索します。アプリIDが異なる場合、生成されるキーも異なります。

同じセッションを共有している異なるAppIdを持つ複数のサーバーを持つことの正味の効果は、あるサーバーによって作成されたIDが別のサーバーからのIDと衝突せず、異なるAppIdを持つマシンが互いのセッションを認識しないことです。

于 2009-12-01T03:05:18.370 に答える