У меня есть две идентичных установки приложений на IIS на различных виртуальных каталогах (я сделал некоторое обходное решение, чтобы гарантировать, чтобы у них обоих было то же имя приложения). Существует ли способ совместно использовать идентификатор сессии через два веб-приложения asp.net?
Так как я храню сессию в StateServer, они должны оба получать те же данные сессии, однако, другой идентификатор сессии создается каждый раз, я иду от приложения a до applicatino b. Разве этого не произошло бы в сценарии выравнивания нагрузки также? Где, когда я перехожу к www.test.com, это перенаправило бы тот запрос к серверу a, и затем если бы я поразил его снова, то это перешло бы к серверу b, но так как это - другое веб-приложение, это создало бы новый идентификатор сессии?
Сначала настройте элемент sessionState в файле web.config для использования cookieName = "SOME_COOKIE_NAME_HERE" в обоих приложениях.
Затем просто убедитесь, что URL-адреса имеют один и тот же TLD (домен верхнего уровня), то есть app1.mydomain.com и app2.mydomain.com, и вы сможете обработать событие Session_Start в Global.asax и поместить это code:
HttpCookie cookie = new HttpCookie("SOME_COOKIE_NAME_HERE", Session.SessionID.ToString());
cookie.Expires = DateTime.Now.AddMinutes(20);
cookie.Domain = "*.mydomain.com";
cookie.HttpOnly = true;
Response.SetCookie(cookie);
Также я бы порекомендовал вам использовать SqlServer SessionState Mode.
Ваша цель - разделить состояние сеанса между двумя приложениями, а не только идентификатор сеанса? Я считаю, что StateServer также использует путь к приложению, а также идентификатор сеанса для хранения данных, поэтому, даже если идентификаторы сеанса были такими же, вы все равно не смогли бы поделиться данными. Возможно, вам придется написать свой собственный модуль сеанса.
У веб-приложений с балансировкой нагрузки нет этой проблемы, потому что путь к приложению одинаков для всех членов кластера.