【问题标题】:Servlet's session MaxInactiveInterval setter and getter methods not workingServlet 的会话 MaxInactiveInterval setter 和 getter 方法不起作用
【发布时间】:2013-11-04 06:03:36
【问题描述】:

以下是我的代码。

在这, 会话超时立即,因为我们说, “0 秒不活动后超时”。

因此 session.getAttribute("foo") 必须给出异常。但是代码可以正常工作,就像会话根本没有超时一样。

 public void doGet(HttpServletRequest request, HttpServletResponse response)
                                                           throws IOException {
         response.setContentType(“text/html”);
         PrintWriter out = response.getWriter();
         HttpSession session = request.getSession();
         session.setAttribute(“foo”, “42”);
         session.setMaxInactiveInterval(0);
         String foo = (String) session.getAttribute(“foo”);
         if (session.isNew()) {
            out.println(“This is a new session.”); 
          } else {
            out.println(“Welcome back!”);
        }
        out.println(“Foo: “ + foo);
 }

当我使用 getMaxInactiveInterval() 时,问题也类似。

当我第一次明确调用 setMaxInactiveInterval() 时,它会给出正确的结果。但是,如果没有以编程方式设置,getMaxInactiveInterval 不会显示默认会话超时,即 30 分钟。相反,它总是给出 60 秒 作为结果。

我的服务器是 Apache Tomcat 7。 感谢您的帮助

【问题讨论】:

  • 在会话中设置一些东西并在不处理响应的情况下获取它有什么意义???
  • HeadFirst JSP 和 Servlet Book 中解释了代码以显示 Session 方法的语义。因此,请原谅我缺乏逻辑,如果有的话,从应用程序的角度来看,先生。感谢您的回复。

标签: servlets session-timeout


【解决方案1】:
     session.setMaxInactiveInterval(0);

通过文档

指定 servlet 容器使该会话无效之前客户端请求之间的时间(以秒为单位)。 间隔值为零或更小表示会话永远不应超时。 参数: interval - 指定秒数的整数

因此,如果您将其设置为零,它将永远不会超时。如果您尝试使用

         session.setMaxInactiveInterval(10);

它将在 10 秒后过期。请注意,web.xml 中还有一个值表示超时(以分钟为单位),即您以编程方式设置的值,即以秒表示的间隔。

【讨论】:

  • 先生,我在发布这个问题前 1 秒检查了这个值。然后我在 servlet 的线程上调用了 sleep(1200) 方法,以便会话可能超时,即使那样,它也不起作用。使用 getMaxInactiveInterval(),我也考虑了那些 web.xml 因素。谢谢你的回答,先生。
  • 不要设置睡眠时间。你必须在 10 秒内刷新页面,你会看到你加载了旧会话,10 秒后你会看到会话是一个新会话。请尝试这种方式,你会明白发生了什么
【解决方案2】:

Tomcat 使用后台线程使会话过期。默认情况下,该线程每分钟只检查一次会话是否过期。

如果getMaxInactiveInterval() 没有返回默认值 1800(30 分钟),那么某个地方已经更改了默认值。

【讨论】:

  • 我希望我也能接受您的回答...因为您的回答也引导我正确理解该主题。不管怎样,让我搜索你给别人的答案。我会为你的那些有用的答案(肯定会有很多)投票给你。先生,我欠你很多时间......
猜你喜欢
  • 1970-01-01
  • 2019-04-01
  • 2011-04-14
  • 2017-09-09
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多