会话超时不起作用vaadin

时间:2014-10-10 08:10:20

标签: java session servlets vaadin vaadin7

我正在开发一个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 精确地做什么?

1 个答案:

答案 0 :(得分:2)

心跳表示客户端仍然存在。 例如,当用户关闭浏览器时,客户端无法再发送心跳, 服务器检测到这一点并清理服务器端的UI。 默认情况下,这会使会话永远存在。 因此,如果不是预期的行为,则必须在web.xml中设置它:

<init-param>
    <description>Enable Session Timeout</description>
    <param-name>closeIdleSessions</param-name>
    <param-value>true</param-value>
</init-param>