Kolizja JSESSIONID między dwoma serwerami na tym samym ip, ale różnych portach

Mam sytuację, w której mam dwa różne webapy działające na jednym serwerze, używające różnych portów. Oba używają kontenera serwletów Jetty Java, więc oba używają parametru cookie o nazwie JSESSIONID do śledzenia identyfikatora sesji. Te dwie aplikacje internetowe walczą o identyfikator sesji.

Otwórz kartę Firefox i przejdź do WebApp1Odpowiedź HTTP WebApp1 ma nagłówek set-cookie z JSESSIONID = 1Firefox ma teraz nagłówek Cookie z JSESSIONID = 1 we wszystkich żądaniach HTTP do WebApp1Otwórz drugą kartę Firefox i przejdź do WebApp2Reqeust HTTP do WebApp2 ma również nagłówek Cookie z JSESSIONID = 1, ale w doGet, gdy dzwonięreq.getSession(false); dostajęnull. A jeśli zadzwonięreq.getSession(true) Otrzymuję nowy obiekt Session, ale wtedy odpowiedź HTTP z WebApp2 ma nagłówek set-cookie z JSESSIONID = 20Teraz WebApp2 ma działającą sesję, ale sesja WebApp1 zniknęła. Przejście do WebApp1 da mi nową sesję, która zdmuchnie sesję WebApp2.Kontynuuj na zawsze

Tak więc sesje są rzucane między każdą aplikacją internetową. Naprawdę chciałbym nareq.getSession(false) zwrócić prawidłową sesję, jeśli zdefiniowano już plik cookie JSESSIONID.

Jedną z opcji jest ponowne zaimplementowanie struktury Session za pomocą HashMap i plików cookie o nazwie WEBAPP1SESSIONID i WEBAPP2SESSIONID, ale to jest do bani i oznacza, że ​​będę musiał zhackować nowe rzeczy Session na ActionServlet i kilka innych miejsc.

To musi być problem, który napotkali inni. Czy Jetty'sHttpServletRequest.getSession(boolean) po prostu gówniany?

questionAnswers(5)

yourAnswerToTheQuestion