Tomcat erstellen einer neuen Sitzung für jede Anforderung
Arbeite ich an diesem problem seit 2 Tagen jetzt und ich bin der Hoffnung, dass jemand hier ein ähnliches problem gehabt und eine Lösung dafür.
Problem:
Es ist ein Spring MVC (2.5.6.) Web-Anwendung, die läuft im Tomcat 6.
Wenn der start-Seite angefordert wird, es leitet den Kunden auf eine JSP-Seite (mit HTML-meta-refresh-tags), die lädt er den Inhalt mit einer Menge von Ajax-Anfragen (Framework: Prototype). Das problem ist, dass Tomcat erstellt eine neue Sitzung für jede AJAX-Anfragen (etwa 67 Sitzungen).
Mein Erster Gedanke war, dass das Session-Cookie gespeichert ist, nachdem die start-Seite geladen wird und die Ajax-Anfragen, die Kräfte der Tomcat eine neue Sitzung zu erstellen. Mein Ansatz war, die session-cookie per hand, aber das machte keinen Unterschied.
Das lustige an der Sache ist, dass es funktioniert in einigen anderen tomcat-Instanzen, aber nicht in die gewünschte Umgebung für die Integrations-tests. Meiner Meinung nach ist es ein Tomcat-Konfiguration Problem.
Nach einer weiteren Untersuchung mit Firebug habe ich herausgefunden, dass Tomcat erzeugt eine neue Session für jede Anfrage, selbst wenn das Recht JSESSIONID übertragen, um es (50B5EA0BCFE811C744CE9C1F9EDE0097):
Request Header 1:
Cookie JSESSIONID=F3206CBF2C961E125821FF22FA31A02D
Response Header 1:
Set-Cookie JSESSIONID=49E000B4D6880F4F94531AB9C78DB667; Path=/JOCA-Music-Portal JSESSIONID=50B5EA0BCFE811C744CE9C1F9EDE0097; Path=/JOCA-Music-Portal
Request Header 2:
Cookie JSESSIONID=50B5EA0BCFE811C744CE9C1F9EDE0097
Response Header 2:
Set-Cookie JSESSIONID=DCCA2D1B98D11223A6B8855800276E27; Path=/JOCA-Music-Portal
UPDATE: Weitere Untersuchungen isoliert das problem mit dem Tomcat Realm-Konfiguration. Wir verwenden eines JDBC-Realm für den login. Wenn der login ist deativated, nur eine Sitzung erstellt wird.
Wenn es aktiviert ist, Tomcat schafft ungültig/abgelaufen Sitzungen, das ist, warum Sie eine neue Sitzung erstellt wird, mit jeder Anfrage. Aber warum macht Tomcat so zu Verhalten?
Ich bin echt verzweifelt, so dass jeder Gedanke/Tipp/Lösung ist gut geschätzt.
Vielen Dank
- hast du die Lösung ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, analysieren Sie den HTTP-Verkehr zwischen Ihrem client und server. Stellen Sie sicher, dass der Cookie-header ist richtig eingestellt, die in der Anfrage und der Antwort.
Wenn Sie Firefox verwenden, können Sie versuchen, Debuggen mit Firebug.
cookies=false
in Ihrem<context>
Abschnitt Ihres Tomcat-config? Was ist der Wert vonuseHttpOnly
?useHttpOnly
eingestellt isttrue
in einigen config-Datei (mit Tomcat, können Sie diese info an so viele Orte, siehe vorgenannten doc)Wir vor kurzem lief in das gleiche Problem mit einer app, die wir entwickelt haben. Kommen, um herauszufinden, das Problem ist, dass Tomcat geändert wurde, um zu verhindern, session-fixation-Angriffe. Standardmäßig wird eine neue session-id erzeugt, die auf die Authentifizierung. Dies begann mit 6.0.21. Überprüfen Sie heraus die Kontext-Konfigurations-option 'changeSessionIdOnAuthentication' (tomcat-Fehler/Problem ist https://issues.apache.org/bugzilla/show_bug.cgi?id=45255).
Wir liefen in das gleiche problem, aber bei der Verwendung von benutzerdefinierten EXTERNALSSO-Authentifizierung. Die Lösung war explizit ausschalten in den Konstruktor unserer Klasse, die erbt von
org.apache.catalina.authenticator.AuthenticatorBase
: