【发布时间】:2018-08-17 08:00:02
【问题描述】:
我正在使用Vaadin 7.7.9 和 Apache Tomcat 9.0。
我的目标是在 12 小时后使用户会话过期,因此如果用户在上午 8 点登录系统,则会话必须在下午 6 点左右过期。但是会话将在下午 3.5 到 4.5 之间到期。有时会话会在 15-30 分钟后过期。
为什么我的会话没有在 12 小时后过期?
servlet 类上的 Vaadin servlet 参数:
@VaadinServletConfiguration(productionMode = true, ui =
com.dokcloud.DokcloudUI.class, heartbeatInterval = -1, closeIdleSessions = true)
在我的 UI 类的 init 方法上:
DokcloudUI.getCurrent().getSession()
.getSession().setMaxInactiveInterval(43200); // 12 hours
该系统正在Elastic bean stalk (AWS) 上发布。
【问题讨论】:
-
你使用的是Push technology吗?我隐约记得,这样做可以使会话保持活动状态,从而防止自动关闭。该会话到期仅在会话处于非活动状态(安静)时才开始,这意味着用户没有做任何事情。自会话开始以来,到期时间不是,只是自用户(或可能是推送技术)的最后一次活动以来。
-
据我所知,Vaadin 7 不是为在 Tomcat 9 上工作而构建的。你可能想坚持使用 Tomcat 8.5.x。
-
是的,我正在使用 vaadin 提供的 @Push 注释(在自动模式下)。感谢您的回答,我将使用tomcat 8.5。所以要在 12 小时后过期会话,我必须启用心跳间隔并将其设置为 14400(12 小时 / 3 秒)?
-
传统会话超时始终基于最后一个活动,而不是第一次交互的时间。您必须在 vaadin 会话中以您自己的逻辑来实现这一点。 (不是 servlet 会话)
标签: session tomcat java-8 vaadin vaadin7