Состояние сеанса SQL Server, веб-ферма и конфигурация IIS - PullRequest
6 голосов
/ 01 декабря 2009

Поэтому я настроил состояние сеанса SQL Server, используя SQL Server 2008 и временную базу данных, и сегодня я решил изучить данные в таблицах только для того, чтобы найти их в таблице 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 / root / webapp

У нас есть 2 веб-сервера с балансировкой нагрузки.

Когда я просматриваю идентификаторы веб-приложений обоих серверов, я вижу, что у web1 есть app1 с идентификатором 4, а у web2 есть app1 с идентификатором 5. То же самое происходит с другим приложением. У web1 есть app2 с идентификатором 1, а у web2 есть app2 с идентификатором 3.

Мой здравый смысл говорит мне, что веб-серверы не делят сессии, так как идентификатор сессии использует appid. Я прав? Если так, то почему эта незначительная деталь не так очевидна в документации? Должен ли я сделать совпадение идентификаторов на обоих веб-серверах?

1 Ответ

6 голосов
/ 01 декабря 2009

AppId используется во время создания SessionId, чтобы помочь избежать коллизий от одного приложения к другому. Он создан путем вычисления хэша пути приложения IIS.

В вашей среде поток может выглядеть примерно так:

  1. Сервер A создает идентификатор сеанса, устанавливает его в файле cookie и сохраняет некоторые данные в соответствующем сеансе (строка в ASPStateTempSessions). Столбец идентификатора сеанса создается путем объединения идентификатора сеанса с AppID.
  2. Сервер B получает запрос с уже существующим идентификатором сеанса и использует его для поиска связанных данных сеанса из таблицы ASPStateTempSessions. Если идентификатор приложения отличается, сгенерированный ключ также будет другим.

Общий эффект наличия нескольких серверов с разными AppIds, которые совместно используют одни и те же сеансы, состоит в том, что идентификаторы, созданные одним сервером, не будут конфликтовать с идентификаторами с другого сервера, а машины с разными AppIds не будут видеть сессии друг друга. 1011 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...