Java 从HttpSession对象获取过期信息
我试图从HttpSessionListener捕获sessionDestroyed事件,以检查是否由sessionTimeout触发 在调试时,我可以看到一个名为“expiring”的属性,根据文档,该属性用于在内部跳过一些异常 到期 我们目前正在处理会话过期,因此请绕过某些IllegalStateException测试。 问题是,由于此属性设置为“受保护”,我无法检查此事件是否由会话超时有效触发 我需要捕获此会话超时事件以在数据库中保存记录 有人能帮我吗 这就是我到目前为止所做的:Java 从HttpSession对象获取过期信息,java,httpsession,Java,Httpsession,我试图从HttpSessionListener捕获sessionDestroyed事件,以检查是否由sessionTimeout触发 在调试时,我可以看到一个名为“expiring”的属性,根据文档,该属性用于在内部跳过一些异常 到期 我们目前正在处理会话过期,因此请绕过某些IllegalStateException测试。 问题是,由于此属性设置为“受保护”,我无法检查此事件是否由会话超时有效触发 我需要捕获此会话超时事件以在数据库中保存记录 有人能帮我吗 这就是我到目前为止所做的: publ
public class AppHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
LOG.log(Level.INFO, "DEBUG: SESION DESTRUIDA");
}
private static final Logger LOG = Logger.getLogger(AppHttpSessionListener.class.getName());
}
在HTTP协议中,当客户端不再处于活动状态时,没有明确的终止信号。这意味着可以用来指示客户端何时不再处于活动状态的唯一机制是超时时间 会话的默认超时时间由servlet容器定义,可以通过HttpSession接口的getMaxInactiveInterval方法获得。开发人员可以使用HttpSession接口的setMaxInactiveInterval方法更改此超时。这些方法使用的超时时间以秒为单位定义。根据定义,如果会话的超时期限设置为-1,则会话将永远不会过期。在使用该会话的所有servlet退出服务方法之前,会话失效将不会生效。一旦启动会话失效,新请求必须不能看到该会话
HttpSession接口的getLastAccessedTime方法允许servlet确定在当前请求之前最后一次访问会话的时间。当作为会话一部分的请求首先由servlet容器处理时,会话被认为是被访问的。您可以尝试估计一下吗
@Override
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession httpSession = se.getSession();
long lastAccessedTime = httpSession.getLastAccessedTime();
int maxInactiveTime = httpSession.getMaxInactiveInterval();
if ((System.currentTimeMillis() - lastAccessedTime) >= (maxInactiveTime*1000) {
LOG.log(Level.INFO, "DEBUG: SESION DESTRUIDA");
}
这正是我现在所做的!哈哈谢谢这是一个正确的答案谢谢!我想投你一票,但我没有足够的代表。但是的,这给了我足够的线索来找到解决方案:)。