Tomcat erstellt für jede Anfrage eine neue Sitzung

8

Ich arbeite jetzt seit zwei Tagen an diesem Problem und hoffe, dass hier jemand ein ähnliches Problem und eine Lösung dafür hat.

Das Problem: Es ist eine Spring MVC (2.5.6.) Web Application, die in Tomcat 6 läuft. Wenn die Startseite angefordert wird, leitet sie den Kunden auf eine JSP-Seite weiter (indem HTML-Meta-Aktualisierungs-Tags verwendet werden), die ihren Inhalt mit vielen Ajax-Anfragen lädt (Framework: Prototype). Das Problem ist, dass Tomcat für jede AJAX-Anfrage eine neue Sitzung erstellt (ca. 67 Sitzungen). Mein erster Gedanke war, dass das Session-Cookie gespeichert wird, nachdem die Startseite geladen wurde und die Ajax-Anfragen den Tomcat zwingen, eine neue Sitzung zu erstellen. Mein Ansatz war es, den Session-Cookie per Hand zu erstellen, aber das machte keinen Unterschied. Das Lustige ist, dass es in einigen anderen Tomcat-Instanzen funktioniert, aber nicht in der gewünschten Umgebung für die Integrationstests. Meiner Meinung nach ist es ein Tomcat-Konfigurationsproblem.

Nach weiteren Untersuchungen mit Firebug fand ich heraus, dass Tomcat für jede Anfrage eine neue Sitzung erstellt, selbst wenn die richtige JSESSIONID dorthin übertragen wurde (50B5EA0BCFE811C744CE9C1F9EDE0097):

%Vor%

UPDATE: Weitere Untersuchungen isolierten das Problem in der Tomcat Realm Konfiguration. Wir verwenden einen JDBC-Realm für die Anmeldung. Wenn die Anmeldung deaktiviert wird, wird nur eine Sitzung erstellt. Wenn diese Option aktiviert ist, erstellt Tomcat ungültige / abgelaufene Sitzungen. Aus diesem Grund wird bei jeder Anfrage eine neue Sitzung erstellt. Aber warum verhält sich Tomcat so?

Ich bin wirklich verzweifelt, also wird jeder Gedanke / Hinweis / Lösung sehr geschätzt.

Vielen Dank

    
Fabe 24.11.2010, 20:18
quelle

3 Antworten

3

Sie können versuchen, den HTTP-Verkehr zwischen Ihrem Client und Ihrem Server zu analysieren. Stellen Sie sicher, dass der Cookie-Header in der Anfrage und in der Antwort richtig eingestellt ist.

Wenn Sie Firefox verwenden, können Sie versuchen, mit Firebug zu debuggen.

    
gawi 24.11.2010 20:32
quelle
2

Wir haben kürzlich mit einer von uns entwickelten App auf dasselbe Problem gestoßen. Kommen Sie, um herauszufinden, das Problem ist, dass Tomcat geändert wurde, um Angriffe zur Sitzfixierung zu verhindern. Standardmäßig wird bei der Authentifizierung eine neue Sitzungs-ID erstellt. Dies begann mit 6.0.21. Überprüfen Sie die Kontext-Konfigurationsoption 'changeSessionIdOnAuthentication' (Tomcat-Fehler / Problem ist Ссылка ).

    
Jason Christian 23.02.2011 13:40
quelle
0

Wir haben das gleiche Problem, aber bei Verwendung der benutzerdefinierten EXTERNALSSO-Authentifizierung. Die Lösung war, es explizit im Konstruktor unserer Klasse auszuschalten, die von org.apache.catalina.authenticator.AuthenticatorBase :

erbt %Vor%     
Pavel 09.02.2012 17:39
quelle