我正在开发一个vaadin Web应用程序,我在web.xml中添加了以下代码片段。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
现在我注意到30分钟后我的用户也可以使用该应用程序,但我不想这样做。我在vaadin书上读到了关于这个问题的一些事情,但我并没有贬低某些事情。
来自vaadin书:
用户不活动后的会话超时
在正常的servlet操作中,会话超时定义了允许的 服务器应该清理会话之前的不活动时间。 从上次服务器请求开始计算不活动。不同 servlet容器使用不同的超时默认值,例如30 Apache Tomcat的分钟数。您可以设置超时 用:
在web.xml中:
<session-config> <session-timeout>30</session-timeout> </session-config>
会话超时应该超过心跳间隔或 否则会话会在心跳保持之前关闭 活。当会话到期时,UI处于它们所处的状态 假设会话仍然存在,这将导致不同步 浏览器中的错误通知。
但是,心跳间隔比会话超时短, 这是正常情况,可以防止会话过期。如果 启用了servlet的closeIdleSessions参数(禁用 默认情况下,Vaadin关闭UI和会话后的时间 session-timeout参数中指定的值在最后一个之后到期 非心跳请求。
在web.xml中:
<servlet> ... <init-param> <param-name>closeIdleSessions</param-name> <param-value>true</param-value> </init-param>
现在我认为问题在于我的应用服务器将UI置于他们认为会话仍然存在的状态但是我无法理解什么是心跳?什么 closeSessionId 精确地做什么?
答案 0 :(得分:2)
心跳表示客户端仍然存在。 例如,当用户关闭浏览器时,客户端无法再发送心跳, 服务器检测到这一点并清理服务器端的UI。 默认情况下,这会使会话永远存在。 因此,如果不是预期的行为,则必须在web.xml中设置它:
<init-param>
<description>Enable Session Timeout</description>
<param-name>closeIdleSessions</param-name>
<param-value>true</param-value>
</init-param>