Я управляю общим состоянием сеанса на двух производственных веб-серверах, используя базу данных SQL Server.
Недавно я понял, (И я почти уверен, что раньше )такого не было, что сессия на самом деле не разделяется при переходе с сервера на сервер.
На обоих серверах работает один и тот же веб-сайт в одном домене, и они балансируются с помощью аппаратного балансировщика нагрузки. Оба работают под IIS7. И на обоих серверах запущена служба состояния ASP.NET.
При проверке заголовков HTTP и перекрестных ссылок с захватами профилировщика SQL я обнаружил, что, по моему мнению, может быть проблемой.
Значение SessionId в моих файлах cookie представляет собой строку из 24 символов, например:y4hfairc2xbwlupkdsqpv0nz
Идентификатор сеанса, полученный базой данных ASPState
и сохраненный там, длиннее и имеет специфичный для сервера 8-символьный постфикс. например. 2476b033
или 2b7731d2
, которые одинаковы для всех сеансов, хранящихся в базе данных.
Таким образом, SessionID выглядят как:y4hfairc2xbwlupkdsqpv0nz2476b033
илиy4hfairc2xbwlupkdsqpv0nz2b7731d2
Очевидно, из-за этого сеанс не является общим, и каждый сервер поддерживает свое собственное состояние сеанса.
Кто-нибудь, использующий аналогичную конфигурацию, мог сталкиваться с этим раньше?
Спасибо
Оказывается здесь:Идентификатор сеанса, сохраненный в SQL Server, отличается от созданного в среде выполнения asp.net тем, что дополнительные символы являются идентификатором приложения IIS. Теперь мне нужно выяснить, как изменить его, чтобы оба сервера совпадали. Пока не повезло.
Кто угодно?