У меня была похожая проблема: один или несколько экземпляров одного и того же приложения на localhost на разных портах, выбранных во время запуска приложения, каждый из которых использует свой собственный экземпляр jetty.
Через некоторое время я придумал следующее:
socketManager.getLocalPort()
)(sessionHandler. getSessionManager().setSessionCookie(String)
)Таким образом, у меня разное имя cookie для каждого экземпляра - таким образом, больше нет помех.
Это не проблема Jetty, а то, как была определена спецификация cookie. Помимо пары имя / значение, файл cookie может также содержать дату истечения срока действия, путь, имя домена и информацию о том, является ли файл cookie безопасным (т. Е. Предназначен только для соединений SSL). Номер порта не указан выше ;-), поэтому вам нужно будет изменить либо путь, либо домен, как говорит степанчег в своем ответе.
Это правильное поведение. Вы можете разместить два своих веб-приложения в разных доменах или разными путями.
Я полагаю, вы также можете установить путь для файлов cookie jsessionid.
Я покопался и обнаружил, что в AbstractSessionManager
есть метод под названием getCrossContextSessionIDs ()
. Если он возвращает true
, то при создании нового сеанса Jetty сначала проверяет, установлен ли JSESSIONID, и пытается использовать этот существующий идентификатор сеанса. Я думаю, что могу установить значения true
, используя какое-то свойство java при запуске.
При дальнейшем копании это поможет мне, только если я запускаю два веб-приложения в разных контекстах одной и той же Jetty. (следовательно, кросс-контекст). При создании нового объекта Session
выбирается новое значение JSESSIONID
. Если getCrossContextSessionIDs ()
возвращает true
, то это '