会话超时混乱-session.setMaxInactiveInterval(0)

杰诺布

我是JEE的新手,这使我感到困惑。根据HttpSession.html#setMaxInactiveInterval(int interval)文档

小于或等于intervalzero表示会话永不超时

但是根据我的教科书(已经存在数年了-因此我希望它并不总是正确的),使用零作为参数应该会导致会话立即超时。

这段代码

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

    }
}

在Glassfish 4.0上使用的方法似乎可以从教科书(而不是较新的官方文档)中确认理论,因为它返回HTTP状态500-内部服务器错误,并显示错误消息

java.lang.IllegalStateException: getAttribute: Session already invalidated

这里发生了什么?这是Glassfish 4.0错误还是文档错误?也许还有第三种选择?


PS。此代码可以正常工作,带有负值(会话不会无效),我正在使用-1而不是0在我的代码中使用。我只是很感兴趣0

Sotirios Delimanolis

关于会话超时Servlet规范章节说明

根据定义,如果会话的超时时间设置为-1,则该会话将永不过期。

所以GlasshFish似乎涵盖了这一点。我在规范中找不到任何引用,说明0with的值也应如此setMaxInactiveInterval()但是它确实说

session-config此Web应用程序定义会话参数。子元素session-timeout定义此Web应用程序中创建的所有会话的默认会话超时间隔。指定的超时时间必须以分钟为单位表示。如果超时为0或更小,则容器确保会话的默认行为永远不会超时。如果未指定此元素,则容器必须设置其默认超时期限。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章