代码之家  ›  专栏  ›  技术社区  ›  Tom

SessionTimeout:web.xml与session.maxInactiveInterval()

  •  58
  • Tom  · 技术社区  · 15 年前

    我想暂停一下 在爪哇。我的容器是WebLogic。

    网站.xml 文件,像这样

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

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

    我不想在15分钟内取消所有会话,只想取消那些已停用15分钟的会话。

    这些方法等效吗?我应该赞成吗 配置?

    3 回复  |  直到 11 年前
        1
  •  121
  •   Community CDub    5 年前

    不管他们的活动 .

    这是 错误的

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


    来体验一下 你自己 <会话超时> 到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());
        }
    
    }
    

    @WebListener ,然后注册 网站.xml (如下所示) :

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

    请注意,servletcontainer不会立即销毁会话 确切地 超时值。它是一个后台作业,按一定的间隔运行(例如,根据负载和servletcontainer的品牌/类型,5~15分钟)。所以当你看不见的时候不要惊讶 destroyed 一分钟不活动后,立即在控制台中输入行。但是,当您在超时但尚未销毁的会话上触发HTTP请求时,它将立即被销毁。

    另请参见:

        2
  •  12
  •   Pascal Thivent    15 年前

    现在,我被告知这将在使用的第15分钟终止会话(或者是所有会话?),而不管它们的活动如何。

    不,那不是真的。这个 session-timeout 在不活动的情况下配置每会话超时。

    这些方法等效吗?我应该选择web.xml配置吗?

    web.xml中的设置是全局的,它适用于给定上下文的所有会话。通过编程,您可以为特定会话更改此设置。