gpt4 book ai didi

java - session 超时混淆 - session.setMaxInactiveInterval(0)

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:28 28 4
gpt4 key购买 nike

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

An interval value of zero or less indicates that the session should never timeout.

但根据我的教科书(已经有几年历史了 - 所以我希望它不会总是正确的)使用零作为参数应该会导致 session 立即超时。

这段代码

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 Status 500 - Internal Server Error 和错误消息

java.lang.IllegalStateException: getAttribute: Session already invalidated

这是怎么回事?这是 Glassfish 4.0 错误还是文档有误?或者也许还有第三种选择?


附言。此代码在负值下正常工作( session 未失效),我在我的代码中使用 -1 而不是 0 。我只是对 0 有什么问题感兴趣。

最佳答案

Servlet Specification关于 session 超时状态的章节

By definition, if the time out period for a session is set to -1, the session will never expire.

所以 GlasshFish 似乎涵盖了这一点。我在规范中找不到任何引用资料表明 0 的值与 setMaxInactiveInterval() 的值应该相同。然而它确实说

The session-config defines the session parameters for this Web application. The sub-element session-timeout defines the default session time out interval for all sessions created in this Web application. The specified time out must be expressed in a whole number of minutes. If the time out is 0 or less, the container ensures the default behavior of sessions is never to time out. If this element is not specified, the container must set its default time out period.

关于java - session 超时混淆 - session.setMaxInactiveInterval(0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21064035/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com