Pregunta

Soy nuevo en JEE y esto es lo que me confunde.De acuerdo a HttpSession.html#setMaxInactiveInterval(intervalo int) documentación

Un interval valor de zero o menos indica que el la sesión nunca debe expirar.

pero según mi libro de texto (que ya tiene algunos años, por lo que espero que no siempre sea correcto), usar cero como argumento debería hacer que la sesión se agote inmediatamente.

este codigo

public class Test extends HttpServlet {

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter out = response.getWriter();

        HttpSession session = request.getSession();
        session.setAttribute("foo", 42);
        session.setMaxInactiveInterval(0);

        out.println(session.getAttribute("foo"));//problem here

    }
}

utilizado en Glassfish 4.0 parece confirmar la teoría del libro de texto en lugar de la documentación oficial más nueva porque regresa Estado HTTP 500: error interno del servidor con mensaje de error

java.lang.IllegalStateException: getAttribute: Session already invalidated

¿Que esta pasando aqui?¿Se trata de un error de Glassfish 4.0 o la documentación es incorrecta?¿O tal vez haya una tercera opción?


PD.Este código funciona como debería con valores negativos (la sesión no se invalida) y estoy usando -1 en lugar de 0 en mi código.Sólo estoy interesado en lo que está mal 0.

¿Fue útil?

Solución

El Especificación de servlet capítulo sobre estados de tiempos de espera de sesión

Por definición, si el período de tiempo libre para una sesión se establece en -1, la sesión nunca caducará.

Entonces GlasshFish parece tener eso cubierto.No puedo encontrar ninguna referencia en la especificación que diga que lo mismo debería ser cierto para un valor de 0 con setMaxInactiveInterval().Sin embargo dice

El session-config Define los parámetros de sesión para esta aplicación web.El subelemento session-timeout define el valor predeterminado intervalo de tiempo de espera de sesión para todas las sesiones creadas en esta Web aplicación.El tiempo de espera especificado debe expresarse en un todo número de minutos. Si el tiempo de espera es 0 o menos, el contenedor garantiza el comportamiento por defecto de las sesiones es nunca perder el tiempo.Si este elemento no se especifica, el contenedor debe establecer su período de tiempo de espera por defecto.

Otros consejos

Esto ya es tiempo muerto e invalidado.

session.setMaxInactiveInterval(0); // mean inactive immediately

Entonces este es el mensaje de error correcto.(Consulte el primer libro para obtener más referencias).

Está intentando acceder al valor del objeto que no existe.ya esta destruido

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top