Ich habe eine Situation, in der ich zwei verschiedene Webapps auf einem einzigen Server mit verschiedenen Ports ausführen kann. Beide verwenden den Jetty-Servlet-Container von Java, sodass beide einen Cookie-Parameter mit dem Namen JSESSIONID verwenden, um die Sitzungs-ID nachzuverfolgen. Diese beiden Webapps kämpfen um die Session-ID.JSESSIONID-Kollision zwischen zwei Servern auf derselben IP-Adresse, aber verschiedenen Ports
- Öffnen Sie ein Firefox-Registerkarte, und gehen Sie zu WebApp1
- WebApp1 der HTTP-Antwort hat eine Set-Cookie-Header mit JSESSIONID = 1
- Firefox hat jetzt einen Cookie-Header mit JSESSIONID = 1 in allem ist es HTTP-Anfragen an WebApp1
- öffnen Sie einen zweiten Firefox-Registerkarte, und gehen Sie zu webapp2
- der HTTP-reqeust zu webapp2 hat auch einen Cookie-Header mit JSESSIONID = 1, aber in der doGet, wenn ich
req.getSession(false);
ichnull
bekommen nennen. Und wenn ich rufereq.getSession(true)
Ich bekomme ein neues Session-Objekt, aber dann hat die HTTP-Antwort von WebApp2 eine Set-Cookie-Header mit JSESSIONID = 20 - Jetzt hat WebApp2 eine funktionierende Sitzung, aber WebApp1 Sitzung ist weg. Wenn ich zur WebApp1 gehe, bekomme ich eine neue Sitzung, die die Sitzung der WebApp2 wegbläst.
- Weiter für immer
So sind die Sessions zwischen jedem Web-App Dreschen. Ich würde wirklich gerne für die req.getSession(false)
eine gültige Sitzung zurückgeben, wenn bereits ein JSESSIONID-Cookie definiert ist.
Eine Option besteht darin, das Session-Framework mit einer HashMap und Cookies namens WEBAPP1SESSIONID und WEBAPP2SESSIONID grundlegend neu zu implementieren, aber das ist schlecht und bedeutet, dass ich die neuen Sessions in ActionServlet und ein paar andere Orte hacken muss.
Dies muss ein Problem sein, auf das andere gestoßen sind. Ist Jettys HttpServletRequest.getSession(boolean)
nur beschissen?
Mein Problem ist, dass, wenn Jetty geht eine neue Sitzung, die standardmäßig zu erstellen, ist es nicht einmal versuchen, den vorhandenen Wert von JSESSIONID zu verwenden. Es wählt einfach einen neuen Wert dafür aus. Wenn es bestehende wiederverwendet, dann könnten meine beiden Instanzen von Jetty nett spielen. –