Tom*_*Tom 58 java session servlets weblogic session-timeout
我正试图在Java 中超时HttpSession.我的容器是WebLogic.
目前,我们在web.xml文件中设置了会话超时,就像这样
<session-config>
<session-timeout>15</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)
现在,我被告知这将在使用的第15分钟终止会话(或者是所有会话?),无论他们的活动如何.
我想知道这种方法是否正确,或者我应该以编程方式设置不活动的时间限制
session.setMaxInactiveInterval(15 * 60); //15 minutes
Run Code Online (Sandbox Code Playgroud)
我不想在15分钟内放弃所有会话,只有那些在15分钟内处于非活动状态的会话.
这些方法是否相同?我应该支持web.xml配置吗?
Bal*_*usC 118
现在,我被告知这将在使用的第15分钟终止会话(或者是所有会话?),无论他们的活动如何.
这是错的.当关联的客户端(webbrowser)访问网站超过15分钟时,它将会终止会话.正如您最初预期的那样,活动肯定会重要,看到您尝试解决此问题.
在HttpSession#setMaxInactiveInterval()不通过的方式在这里多变化.它与<session-timeout>in 完全相同web.xml,唯一的区别是你可以在运行时以编程方式更改/设置它.顺便说一下,这种改变只影响当前的会话实例,而不是全局的(否则它会成为一种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());
}
}
Run Code Online (Sandbox Code Playgroud)
(如果你还没有使用Servlet 3.0,因此无法使用@WebListener,请web.xml按以下方式注册):
<listener>
<listener-class>com.example.HttpSessionChecker</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
请注意,servletcontainer在完全超时值后不会立即销毁会话.这是一个后台工作,以一定的时间间隔运行(例如5到15分钟,具体取决于负载和servletcontainer品牌/类型).因此,如果destroyed在一分钟不活动后没有立即在控制台中看到线路,请不要感到惊讶.但是,当您在超时但未被破坏的会话上触发HTTP请求时,它将立即被销毁.
Pas*_*ent 12
现在,我被告知这将在使用的第15分钟终止会话(或者是所有会话?),无论他们的活动如何.
不,那不是真的.该session-timeout配置在每个会话超时在闲置情况下.
这些方法是否相同?我应该支持web.xml配置吗?
web.xml中的设置是全局的,它适用于给定上下文的所有会话.以编程方式,您可以为特定会话更改此设置.
| 归档时间: |
|
| 查看次数: |
106390 次 |
| 最近记录: |