如何在浏览器关闭或选项卡关闭时销毁 Vaadin 8 会话?

How to destroy Vaadin 8 session on browser close or tab close?

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

我建议将 closeIdleSessions 设置为 true 和较短的心跳间隔,这将强制 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,如 "Using a web.xml Deployment Descriptor" 中所述,则在 servlet 的 session-timeout 参数指定的超时时关闭会话及其所有 UI在最后一个非心跳请求后过期。会话结束后,浏览器将在下一个服务器请求时显示不同步错误。为避免丑陋的消息,您可能需要为 UI 设置重定向 URL,如 "Customizing System Messages".

中所述

相关配置参数详见"Other Servlet Configuration Parameters"。

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