我是JEE的新手,这使我感到困惑。根据HttpSession.html#setMaxInactiveInterval(int interval)文档
小于或等于该
interval
值zero
表示会话永不超时。
但是根据我的教科书(已经存在数年了-因此我希望它并不总是正确的),使用零作为参数应该会导致会话立即超时。
这段代码
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
。
关于会话超时的Servlet规范章节说明
根据定义,如果会话的超时时间设置为-1,则该会话将永不过期。
所以GlasshFish似乎涵盖了这一点。我在规范中找不到任何引用,说明0
with的值也应如此setMaxInactiveInterval()
。但是它确实说
在
session-config
此Web应用程序定义会话参数。子元素session-timeout
定义此Web应用程序中创建的所有会话的默认会话超时间隔。指定的超时时间必须以分钟为单位表示。如果超时为0或更小,则容器确保会话的默认行为永远不会超时。如果未指定此元素,则容器必须设置其默认超时期限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句