2012-04-05 36 views
11

Pregunta general sobre los servlets de Java y la mejor manera de manejar las solicitudes. Si lo golpeo mi método doGet de una solicitud del servidor remoto:Servlet de Java - Limpieza de sesión (HttpServletRequest)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    .... 
    <do work here> 
    .... 
    kill(request); 
} 

private void kill(HttpServletRequest request) { 
//How do I kill the user session here? 
} 

Después de procesar la solicitud en mi extremo y generar mi salida al solicitante, quiero básicamente "matar" a su sesión. Actualmente, esa sesión permanece y por lo tanto consume memoria. Luego, una vez que se alcanza el máximo, se agota el tiempo de todas las demás llamadas.

intenté crear un objeto HttpSession con el objeto de la petición, pero tengo los mismos resultados:

HttpSession session = request.getSession(); 
session.invalidate(); 
+1

tengo la impresión de que su problema concreto necesita ser resuelto de una manera diferente. – BalusC

+0

Probablemente. El objetivo final es que desee finalizar una sesión en mi grupo de sesiones una vez que se haya atendido su solicitud. Ya sea que esté matando o no el objeto de la solicitud o creando un objeto de sesión para esa sesión para eliminarlo, no estoy seguro. – user82302124

Respuesta

20
HttpSession session = request.getSession(false); 
if (session != null) { 
    session.invalidate(); 
} 

es la forma correcta de ir como lo sugiere el documentación. Se creará una nueva sesión una vez que envíe una nueva solicitud.

Mencionó que sus sesiones aún ocupan memoria. ¿Tiene alguna otra referencia a esos objetos en la sesión?

También puede ser que desee echar un vistazo a: Servlet Session behavior and Session.invalidate

2

intento con

session = request.getSession(false); // so if no session is active no session is created 
if (session != null) 
    session.setMaxInactiveInterval(1); // so it expires immediatly 
1

Si no quieres comportamiento de la sesión es decir, que tiene el estado entre múltiples peticiones. ¿Por qué quieres crear/usar sesión en absoluto? No cree sesión o no almacene nada en la sesión.

Para asegurarse de que su código no está utilizando sesión, escriba una envoltura de solicitud que anulará los métodos getSession().

5

Puede eliminar un atributo de una sesión utilizando

session.removeAttribute("attribute name"); 
Cuestiones relacionadas