如何在浏览器关闭或标签关闭时销毁Vaadin会话?

时间:2018-05-25 08:08:14

标签: javascript session vaadin

如何在Vaadin中关闭浏览器关闭/标签关闭会话?我们可以使用javascript来处理这个问题。我试过下面的代码:Page.getCurrent().getJavaScript().execute("window.onbeforeunload = function (e) { var e = e || window.event; closeMyApplication(); return; };"); 上面脚本的问题是,它也会在页面刷新时触发onb​​eforeunload事件。另外,如何在移动设备(触摸设备)中处理这种情况?

1 个答案:

答案 0 :(得分:2)

我建议将closeIdleSessions设置为true和short heart beat interval,这将迫使Vaadin内部会话清理机制在Web浏览器关闭后更快地销毁会话。

如果没有帮助,还有辅助加载项https://vaadin.com/directory/component/cleanupservlet-add-on

复制自 https://vaadin.com/docs/v8/framework/application/application-lifecycle.html

会话有效期

由于用户与应用程序的交互以及UI的心跳监视引起的服务器请求使会话保持活动状态。一旦所有UI都过期,会话仍然存在。当Web应用程序中配置的会话超时到期时,它将从服务器清除。

如果应用程序中存在活动的UI,则它们的心跳会使会话无限期地保持活动状态。如果用户处于非活动状态足够长时间,您可能希望会话超时,这是会话超时设置的最初目的。如果在web.xml中将servlet的closeIdleSessions参数设置为true,如"使用web.xml部署描述符"中所述,会话及其所有UI在由指定的超时时关闭servlet的session-timeout参数在最后一次非心跳请求后到期。会话消失后,浏览器将在下一个服务器请求中显示“不同步”错误。为了避免丑陋的消息,您可能需要为UI设置重定向URL,如"自定义系统消息"中所述。

相关配置参数在"其他Servlet配置参数"。

中描述

您可以使用SessionDestroyListener在服务器端处理会话过期,如用户会话中所述。