у нас есть проблема с веб-сайтом ASP.NET, где сеансы пользователей ведут себя странно - данные сеанса появляются, исчезают и снова появляются.
Думаю, я знаю, в чем проблема:
Следовательно, когда пользователь входит на сайт и перемещается по нему, каждый HTTP-вызов может перейти на любой веб-сервер и, следовательно, использовать запись состояния сеанса с разными идентификаторами в зависимости от сервера. Фактически, у пользователя одновременно будет 2 отдельных экземпляра сеанса. Я считаю, что проверил это как в базе данных ASPStateTempSessions таблица, каждый идентификатор файла cookie сеанса соответствует 2 почти идентично названный записей (их идентификаторы отличаются только несколькими последними символами, которые, как мне кажется, являются модификатором, основанным на AppID из AspStateTempApplications table), созданные с интервалом в несколько секунд.
Следовательно, состояние сеанса будет выглядеть неправильно, поскольку изменения, внесенные в одну запись сеанса, будут сохраняться только на этом веб-сервере. Если пользователь перейдет на другой сервер с балансировкой нагрузки, значения сеанса исчезнут или вернутся обратно.
Я считаю, что решение состоит в том, чтобы синхронизировать идентификаторы экземпляров IIS сайтов (например, сделать их оба / W3SVC / 1 / Корень), но я попытался отредактировать это значение в IIS в разделе «Дополнительные настройки», и, хотя он сохранился нормально, он просто заставил сайт возвращать 404-е на этом сервере, пока я не вернул его обратно.
я нашел сценарий VBS для этой проблемы, но, похоже, только для IIS 6, поэтому я беспокоюсь о том, чтобы попробовать. Кто-нибудь еще сталкивался с этой ситуацией в IIS 7.5, и как вы ее исправили?
РЕДАКТИРОВАТЬ / РЕШЕНИЕ
Моя ошибка заключалась в том, что я забыл перезапустить IIS после того, как я изменил идентификатор экземпляра сайта в IIS. После этого идентификатор был обновлен, и сеансы ASP.NET были синхронизированы на двух веб-серверах.
Полная инструкция:
c:\windows\system32\iisreset /restart
)Сделайте то же самое для LIVE2 (убедитесь, что идентификатор сайта такой же, как в LIVE1)
Обратите внимание, что идентификатор сайта влияет на расположение файлов сайта, например, папка файла журнала станет C:\inetpub\logs\LogFiles\W3SVC10
например.
Также обратите внимание, что вы можете внести эти изменения вручную, отредактировав сайт. мне бы атрибут в файле конфигурации IIS на каждом сервере: C:\Windows\System32\inetsrv\config\applicationHost.config
. Требуются права администратора и после этого требуется сброс.
Судя по вашему вопросу, кажется, что у вас есть центральный сервер состояния сеанса (БД?), Который отслеживает данные сеанса?
Вы также должны синхронизировать машинный ключ, который используется для шифрования для любой аутентификации форм и т. Д., Чтобы работать. Это также может повлиять на идентификацию сеанса, я не уверен.
Настройка машинных ключей в IIS 7
Кроме того, вы должны использовать общую конфигурацию между машинами, она может сама решить проблему с разными ключами машины.
Синхронизация конфигурации IIS для фермы веб-серверов?
РЕДАКТИРОВАТЬ: Когда вы изменили идентификатор сайта, вы пытались перезапустить диспетчер IIS, чтобы узнать, изменился ли веб-корневой каталог? Возможно, конфигурация связана с идентификатором, что означает, что изменение идентификатора также изменяет такие вещи, как корень документа и т. Д.