2010-11-24 12 views
8

Estoy trabajando en este problema durante 2 días y espero que cualquiera aquí tenga un problema similar y una solución para eso.Tomcat crea una nueva sesión para cada solicitud

El problema: Es un MVC primavera (2.5.6.) De aplicaciones Web, que se ejecuta en Tomcat 6. Cuando se solicita la página de inicio se redirige al cliente a una página JSP (mediante el uso de etiquetas meta de actualización de HTML) que carga su contenido con muchas solicitudes de Ajax (Framework: Prototype). El problema es que Tomcat crea una nueva sesión para cada solicitud AJAX (alrededor de 67 sesiones). Lo primero que pensé fue que la cookie de sesión se almacena después de cargar la página de inicio y las solicitudes de Ajax fuerzan al Tomcat a crear una nueva sesión. Mi enfoque fue crear la cookie de sesión a mano, pero esto no hizo ninguna diferencia. Lo curioso es que funciona en algunas otras instancias de tomcat, pero no en el entorno deseado para las pruebas de integración. En mi opinión, es un problema de configuración de Tomcat.

Después de investigaciones adicionales con Firebug, descubrí que Tomcat crea una nueva sesión para cada petición, incluso si el derecho JSESSIONID se transfiere a la misma (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 

ACTUALIZACIÓN: aislado investigación más a fondo el problema de la configuración de Tomcat Realm. Usamos un Reino JDBC para iniciar sesión. Cuando se desatone el inicio de sesión, solo se crea una sesión. Si está activado, Tomcat crea sesiones invalidadas/expiradas, por eso se crea una nueva sesión con cada solicitud. Pero, ¿por qué Tomcat se comporta así?

Estoy realmente desesperado, por lo que cualquier idea/pista/solución es muy apreciada.

Muchas gracias

+0

¿obtuvo la solución? –

Respuesta

3

Usted puede tratar de analyze the HTTP traffic entre el cliente y el servidor. Asegúrese de que el encabezado Cookie esté configurado correctamente en la solicitud y la respuesta.

Si usa Firefox, puede intentar depurar con Firebug.

+0

Antes que nada muchas gracias por su respuesta. El encabezado de la cookie está configurado correctamente, lo he comprobado con Firebug. Olvidé mencionar que en otros entornos funcionó sin ningún problema, pero no en los entornos de prueba de integración. – Fabe

+0

¿Hay 'cookies = false' en su sección' 'de su configuración de Tomcat? ¿Cuál es el valor de 'useHttpOnly'? – gawi

+0

No, no definí ninguna sección de contexto en /META-INF/context.xml, por lo que las cookies y useHttpOnly no están configuradas. ¿Debo definir un context.xml? – Fabe

2

Recientemente nos encontramos con el mismo problema con una aplicación que estábamos desarrollando. Ven a descubrirlo, el problema es que Tomcat fue modificado para ayudar a prevenir ataques de fijación de sesiones. De forma predeterminada, se crea una nueva identificación de sesión en la autenticación. Esto comenzó con 6.0.21. Consulte la opción de configuración de contexto 'changeSessionIdOnAuthentication' (error/problema de Tomcat es https://issues.apache.org/bugzilla/show_bug.cgi?id=45255).

+0

¡Muchas gracias! - Lo comprobaré;) – Fabe

0

Nos encontramos con el mismo problema, pero al usar la autenticación EXTERNALSSO personalizada. La solución fue apagarlo explícitamente en el constructor de nuestra clase que hereda de org.apache.catalina.authenticator.AuthenticatorBase:

super.setChangeSessionIdOnAuthentication(false); 
Cuestiones relacionadas