Java SessionTimeout:web.xml vs session.maxInactiveInterval()
我正在尝试在Java中超时HttpSession。我的容器是WebLogic 目前,我们在web.xml文件中设置了会话超时,如下所示 我不想在15分钟内删除所有会话,只想删除那些已停用15分钟的会话 这些方法等效吗?我应该选择web.xml配置吗 现在,我被告知这将在使用的第15分钟内终止会话(或者是所有会话?),无论他们的活动如何 这是错误的。当相关客户端(webbrowser)超过15分钟未访问该网站时,它将终止会话。正如您最初期望的那样,看到您试图解决此问题,该活动当然很重要 顺便说一句,这里的天气变化不大。它的功能与Java SessionTimeout:web.xml vs session.maxInactiveInterval(),java,session,servlets,weblogic,session-timeout,Java,Session,Servlets,Weblogic,Session Timeout,我正在尝试在Java中超时HttpSession。我的容器是WebLogic 目前,我们在web.xml文件中设置了会话超时,如下所示 我不想在15分钟内删除所有会话,只想删除那些已停用15分钟的会话 这些方法等效吗?我应该选择web.xml配置吗 现在,我被告知这将在使用的第15分钟内终止会话(或者是所有会话?),无论他们的活动如何 这是错误的。当相关客户端(webbrowser)超过15分钟未访问该网站时,它将终止会话。正如您最初期望的那样,看到您试图解决此问题,该活动当然很重要 顺便说一
web.xml
中的
完全相同,唯一的区别是您可以在运行时以编程方式更改/设置它。顺便说一下,更改只影响当前会话实例,而不是全局(否则它将是一个静态方法)
要自己玩并体验这一点,请尝试将
设置为1分钟,然后创建一个类似的:
@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
中注册):
com.example.HttpSessionChecker
请注意,servletcontainer不会在超过超时值后立即销毁会话。它是一个后台作业,以一定的间隔运行(例如,根据负载和servletcontainer的品牌/类型,5~15分钟)。因此,当您在一分钟的不活动之后没有立即在控制台中看到被破坏的行时,不要感到惊讶。但是,当您对超时但尚未销毁的会话发出HTTP请求时,它将立即被销毁
另见:
现在,我被告知这将在使用的第15分钟内终止会话(或者是所有会话?),无论他们的活动如何
不,那不是真的。会话超时
在不活动的情况下配置每个会话超时
这些方法等效吗?我应该选择web.xml配置吗
web.xml中的设置是全局的,它适用于给定上下文的所有会话。通过编程,您可以为特定会话更改此设置 此外,我想澄清一下。此配置适用于所有会话。另一件需要注意的事情是,在web.xml中将该值设置为0或更小,这意味着会话将永远不会超时(只要servlet容器仍然处于活动状态)。但是,通过编程将其设置为0会导致会话立即超时(将其设置为负数意味着会话永远不会超时,与web.xml中的情况相同)。此外,请注意,maxInactiveInterval默认为60秒@BalusC,“当您对一个超时但尚未销毁的会话发出HTTP请求时,它将立即被销毁”,您是否知道会话是否已销毁1.在执行任何控制器代码之前还是2.与控制器逻辑同时/异步?我猜是1.但不确定。
session.setMaxInactiveInterval(15 * 60); //15 minutes
@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());
}
}