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

Un interval valor de zero o menos indica que la sesión debe nunca en tiempo de espera.

pero según mi libro de texto (que ya es de pocos años de edad -, así que espero que no lo sea siempre a la derecha) utilizando el cero como argumento debería causar una sesión de tiempo de espera de inmediato.

Este código

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 de libro de texto en lugar de la más reciente documentación oficial, porque devuelve de Estado HTTP 500 – Error Interno del Servidor con el mensaje de error

java.lang.IllegalStateException: getAttribute: Session already invalidated

¿Qué está pasando aquí? Es este Glassfish 4.0 error o documentación que está mal? O tal vez hay una tercera opción?


PS. Este código funciona como debería con valores negativos (sesión no es invalidado) y estoy usando -1 en lugar de 0 en mi código. Estoy interesado simplemente lo que está mal con 0.

El código funciona en Tomcat 7. Pruebe con -1.
Gracias. -1 funciona bien y ya parece más seguro estoy usando en lugar de 0. Yo estoy solo por curiosidad, ¿qué está mal con cero.
¿Qué sucede si se establece la session-config session-timeout valor de 0 en web.xml?
Cuando me quite session.setMaxInactiveInterval(0); de código y el uso <session-config><session-timeout>0</session-timeout></session-config> en web.xml parece estar funcionando bien (sesión no se destruye). Lo que es interesante session.getMaxInactiveInterval() devuelve -60 (en segundos) así que parece que el valor de session-timeout se convierte -1 (en minutos)
Sí, esa config es en minutos, mientras que setMaxInactiveInterval es en segundos.

OriginalEl autor JEENoob | 2014-01-11

2 Comentarios

  1. 5

    La Especificación Servlet capítulo sobre Tiempos de espera de Sesión de los estados

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

    Así GlasshFish parece que la cubría. No puedo encontrar ninguna referencia en la especificación de que dice que el mismo debe ser cierto para un valor de 0 con setMaxInactiveInterval(). Sin embargo, no dicen

    La session-config define los parámetros de la sesión de esta Web
    aplicación. El sub-elemento session-timeout define el valor por defecto
    el tiempo de la sesión intervalo de espera para todas las sesiones creadas en esta Web
    aplicación. El tiempo de espera especificado debe ser expresado en un conjunto
    número de minutos. Si el tiempo de espera es de 0 o menos, el contenedor asegura
    el comportamiento predeterminado de las sesiones es de nunca el tiempo de espera. Si este elemento
    no es especificado, el contenedor debe establecer su defecto el tiempo de espera.

    Gracias por la especificación de enlace (me gustaría upvote sólo para que si pudiera). Supongo que ya 0 no está definido en la especificación para setMaxInactiveInterval pero sólo para <session-config> Glassfish implementado correctamente (pero no totalmente de acuerdo con JavaDoc) así que no es un error. De todos modos te dará probablemente la mejor respuesta que no sean de vidrio-peces-emploee podría dar lo va a aceptar su respuesta. Tanque una vez más.

    OriginalEl autor Sotirios Delimanolis

  2. 0

    Esto ya está fuera de tiempo y de invalidar

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

    Así que este es el mensaje de error correcto. (por favor, consulte la cabeza del primer libro para mayor referencia).

    Usted está tratando de acceder objeto valor que no existe. ya destruido

    Sí, sé que HF – servlets y JSP muestra que para el argumento 0 sesión será anulada de inmediato, pero en la documentación oficial docs.oracle.com/javaee/7/api/javax/servlet/http/… podemos leer que «Un valor de intervalo de cero o menos indica que la sesión nunca debe timeout.», que fue la fuente de mi confusión.

    OriginalEl autor charitha

Dejar respuesta

Please enter your comment!
Please enter your name here