2010-09-11 27 views
7

Configuro el tiempo de espera de mi sesión.Perdida de sesión al cerrar el navegador

<session-config> 
<session-timeout>11520</session-timeout> 

</session-config>

Cada vez que cierro el navegador y abrirlo de nuevo mediante una llamada al servlet, veo que se crea nueva sesión. Se puede ver desde el método SessionCreated ejecutado en HttpSessionListener cada vez que se vuelve a abrir el navegador.

Soy nuevo en tomcat/Java, pero si estuviese trabajando en un entorno ASP.NET, trabajaría alrededor estableciendo una cookie con el mismo nombre que el nombre de la sesión.

¿Cuál es la mejor práctica para solucionarlo en Tomcat?

gracias de antemano.

Danny.

Respuesta

9

Cada vez que cierro el navegador y lo vuelvo a abrir llamando al servlet, veo que se crea una nueva sesión.

Eso corresponde al comportamiento especificado. La cookie de sesión no tiene una antigüedad, por lo que permanece mientras el cliente tenga abierta la instancia webbrowser o hasta que el cliente no haya visitado el sitio web por mucho tiempo como se especifica en la configuración session-timeout en el lado del servidor.

Básicamente, desea una cookie que viva más tiempo que la cookie de sesión. Puede crear una nueva cookie de larga duración con Cookie API, establecer su antigüedad con Cookie#setMaxAge(), agregarla a la respuesta HTTP usando HttpServletResponse#addCookie(). En las solicitudes HTTP posteriores puede determinar la presencia de la cookie utilizando HttpServletRequest#getCookies().

Esto, por cierto, no es específico de Tomcat. Puedes hacer lo mismo en cualquier otro servletcontainer.

+0

Gracias por su respuesta rapida. ¿Puedo establecer la edad máxima de la cookie en web.xml o en el método creado por HttpSesisonListener sesison? –

+0

Hazlo en un 'Filtro'. Ahí tienes el 'HttpServletReponse' en tus manos. Puede verificar si la sesión es nueva mediante 'HttpSession # isNew()'. – BalusC

9

me enteré, in a similar question, que este es ahora compatible con Servlet 3.0:

<session-config> 
    <session-timeout>11520</session-timeout> 
    <cookie-config> 
    <max-age>11520</max-age> 
    </cookie-config> 
</session-config> 

(Un poco tarde pero espero que esto puede ser útil para alguien más también)

+1

¡Justo lo que estoy buscando! Es la mejor respuesta. – Dmitry

+0

Gracias, me salvaste :) – Oneiros

+0

Gracias por la buena sugerencia –

Cuestiones relacionadas