gpt4 book ai didi

java - SessionTimeout : web. xml 与 session.maxInactiveInterval()

转载 作者:IT老高 更新时间:2023-10-28 20:22:38 27 4
gpt4 key购买 nike

我正在尝试使 Java 中的 HttpSession 超时。我的容器是 WebLogic。

目前,我们在 web.xml 文件中设置了 session 超时,如下所示

<session-config>
<session-timeout>15</session-timeout>
</session-config>

现在,有人告诉我,这将在使用的第 15 分钟终止 session (或者是所有 session ?),无论他们的 Activity 如何。

我想知道这种方法是否正确,或者我应该以编程方式设置不活动的时间限制

session.setMaxInactiveInterval(15 * 60); //15 minutes

我不想在 15 分钟后删除所有 session ,只删除那些已闲置 15 分钟的 session 。

这些方法是否等效?我应该支持 web.xml 配置吗?

最佳答案

Now, i'm being told that this will terminate the session (or is it all sessions?) in the 15th minute of use, regardless their activity.

这是错误。当关联的客户端(网络浏览器)超过 15 分钟未访问该网站时,它将终止 session 。正如您最初预期的那样,该 Activity 当然很重要,因为您尝试解决此问题。

HttpSession#setMaxInactiveInterval() 顺便说一句,这里没有太大变化。它与 <session-timeout> 完全相同。在 web.xml ,唯一的区别是您可以在运行时以编程方式更改/设置它。顺便说一下,更改只会影响当前 session 实例,不会影响全局(否则它会是 static 方法)。


要想亲自体验一下,请尝试设置<session-timeout>到 1 分钟并创建一个 HttpSessionListener 如下:

@WebListener
public class HttpSessionChecker implements HttpSessionListener {

public void sessionCreated(HttpSessionEvent event) {
System.out.printf("Session ID %s created at %s%n", event.getSession().getId(), new Date());
}

public void sessionDestroyed(HttpSessionEvent event) {
System.out.printf("Session ID %s destroyed at %s%n", event.getSession().getId(), new Date());
}

}

(如果您还没有使用 Servlet 3.0 并因此无法使用 @WebListener ,请在 web.xml 中注册,如下所示):

<listener>
<listener-class>com.example.HttpSessionChecker</listener-class>
</listener>

请注意,servletcontainer 不会在恰好超时值之后立即销毁 session 。这是一个以特定时间间隔运行的后台作业(例如 5~15 分钟,具体取决于负载和 servletcontainer 的制作/类型)。所以当你没有看到 destroyed 时不要感到惊讶正好一分钟不活动后立即在控制台中排队。但是,当您在超时但尚未销毁的 session 上触发 HTTP 请求时,它将立即被销毁。

另见:

关于java - SessionTimeout : web. xml 与 session.maxInactiveInterval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3118968/

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