2010-01-15 68 views

Respuesta

8

definir una clase, dicen SessionTimeoutIndicator, que implementa la interfaz javax.servlet.http.HttpSessionBindingListener.

A continuación, cree un objeto SessionTimeoutIndicator y agréguelo a la sesión del usuario.

Cuando se elimina la sesión, el motor Servlet llamará al método SessionTimeoutIndicator.valueUnbound().

A continuación, puede implementar valueUnbound() para realizar la operación requerida.

Espero que se borre ahora.

+9

Simplemente usando 'HttpSessionListener # sessionDestroyed()' haría las cosas más fáciles. – BalusC

26

Sí:

  • puede llamar HttpServletRequest.getSession(false) y obtendrá un lugar de null una sesión si no hay una activa ya.

  • puede definir un detector de ciclo de vida (usando HttpSessionListener) en su web.xml. De esa forma, puede recibir una notificación en el momento en que una sesión muerde el polvo.

+2

+1 para la segunda sugerencia. Por cierto, es bueno nombrarlo, por lo que HttpSessionListener es el elegido. –

+2

Implementar 'HttpSessionListener' es el camino a seguir. Solo enganche 'sessionDestroyed()'. – BalusC

21

Con session.isNew no puede distinguir sesiones caducadas de sesiones completamente nuevas. Puede comprobar si la sesión ha expirado y/o el tiempo de espera con:

if (request.getRequestedSessionId() != null 
     && !request.isRequestedSessionIdValid()) { 
    // Session is expired 
} 

Uso getRequestedSessionId distinguir entre sesiones nuevas y existentes (válido/espirado), y el uso de isRequestedSessionIdValid distinguir betwheen válido y nuevas sesiones/caducados .

Puede poner este código en Filter.

-1

He intentado esto

HttpSessionListener.sessionDestroyed() 

y esto

if (request.getRequestedSessionId() != null 
     && !request.isRequestedSessionIdValid()) { 
    // Session is expired 
} 

tanto trabajo, pero no al 100% por ciento sabes, ya que mantiene en mostrar "sesión ha finalizado", aunque cuando la aplicación inicia por primera vez arriba. ¿Por qué? Gracias por la ayuda.

Cuestiones relacionadas