使用web.xml和setMaxInactiveInterval设置会话超时之间的区别

Sai*_*Sai 4 java session jsp

我有一个要求,要求用户在会话中进行身份验证,并且在闲置10分钟后,会话超时。一旦会话超时,来自当前过期会话的任何其他请求都将重定向到超时页面。我对此进行了研究,得出了两种不同的方法。

方法1:

在web.xml中,我有下面提到的代码...

<session-config>
     <session-timeout>10</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)

方法2:

我在身份验证页面中有下面提到的代码...

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
request.getSession().setMaxInactiveInterval(600);
Run Code Online (Sandbox Code Playgroud)

现在我的问题是这两种方法之间有什么区别?哪个更好或更推荐?而且,在使用方法2时,如果最终用户离开了经过身份验证的页面但未注销,则会话在闲置10分钟后是否仍会超时?

Rom*_*n C 6

第一种方法是在所有会话的配置中使用静态常量。第二种方法是动态的,您可以在运行时使用 servlet API 动态设置值,并且仅影响调用该方法的会话。一旦设置了该值,无论使用哪种方法,容器都会使会话无效。看看文档怎么说HttpSession#setMaxInactiveInterval(int)

指定 servlet 容器使此会话无效之前客户端请求之间的时间(以秒为单位)。

零或更小的间隔值表示会话不应超时。

部署描述符中的值以web.xml“分钟”为单位,但该setMaxInactiveInterval()方法接受以“秒”为单位的值。


Gas*_*Gas 5

会话超时可以在各种级别上设置:

  • 应用程序服务器中,通常存在可以更改的默认设置-这是所有应用程序或给定应用程序的默认设置(取决于服务器配置功能)。
  • 然后在应用程序描述符中 -您可以使用覆盖它web.xml-将用于给定应用程序中的所有会话
  • 然后在应用程序代码中 -您可以使用session.setMaxInactiveInterval()覆盖它,它将仅对该会话覆盖

就像Roman所写的那样,无论您如何设置,超时都会使该容器无效。

您应该避免使用编程方法(最后一种方法),因为很容易错过某些会话,并且它将获得默认的超时,并且您的行为将不一致。如果要确保给定的超时(业务需求)并且不想依赖服务器功能,请使用web.xml。