Коллизия JSESSIONID между двумя серверами на тех же IP, но различных портах

Необходимо взглянуть на env.js. См. мой блог для примера, как записать модульные тесты с env.js.

11
задан Steve Armstrong 17 July 2009 в 23:20
поделиться

5 ответов

У меня была похожая проблема: один или несколько экземпляров одного и того же приложения на localhost на разных портах, выбранных во время запуска приложения, каждый из которых использует свой собственный экземпляр jetty.

Через некоторое время я придумал следующее:

  • дождаться инициализации jetty
  • использовать SocketManager jetty для получения порта (socketManager.getLocalPort())
  • установить имя cookie через SessionManager (sessionHandler. getSessionManager().setSessionCookie(String))

Таким образом, у меня разное имя cookie для каждого экземпляра - таким образом, больше нет помех.

2
ответ дан 3 December 2019 в 10:26
поделиться

Это не проблема Jetty, а то, как была определена спецификация cookie. Помимо пары имя / значение, файл cookie может также содержать дату истечения срока действия, путь, имя домена и информацию о том, является ли файл cookie безопасным (т. Е. Предназначен только для соединений SSL). Номер порта не указан выше ;-), поэтому вам нужно будет изменить либо путь, либо домен, как говорит степанчег в своем ответе.

3
ответ дан 3 December 2019 в 10:26
поделиться

Это правильное поведение. Вы можете разместить два своих веб-приложения в разных доменах или разными путями.

0
ответ дан 3 December 2019 в 10:26
поделиться

Я полагаю, вы также можете установить путь для файлов cookie jsessionid.

0
ответ дан 3 December 2019 в 10:26
поделиться

Я покопался и обнаружил, что в AbstractSessionManager есть метод под названием getCrossContextSessionIDs () . Если он возвращает true , то при создании нового сеанса Jetty сначала проверяет, установлен ли JSESSIONID, и пытается использовать этот существующий идентификатор сеанса. Я думаю, что могу установить значения true , используя какое-то свойство java при запуске.

При дальнейшем копании это поможет мне, только если я запускаю два веб-приложения в разных контекстах одной и той же Jetty. (следовательно, кросс-контекст). При создании нового объекта Session выбирается новое значение JSESSIONID . Если getCrossContextSessionIDs () возвращает true , то это '

1
ответ дан 3 December 2019 в 10:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: