【问题标题】:How to destroy Vaadin 8 session on browser close or tab close?如何在浏览器关闭或标签关闭时销毁 Vaadin 8 会话?
【发布时间】:2018-05-25 08:08:14
【问题描述】:

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

【问题讨论】:

  • 你会遇到更多的问题。通过链接下载文件时也会触发beforeunload。发生这种情况是因为浏览器在发送请求时会触发beforeunload,并假设它会导致导航离开。收到响应后,浏览器会看到标头表明这是下载,而不是要导航到的新页面。
  • 是的……你是对的……谢谢!!

标签: javascript session vaadin vaadin8


【解决方案1】:

我建议将 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,它们的心跳会使会话无限期地保持活动状态。如果用户处于非活动状态的时间足够长,您可能希望会话超时,这是会话超时设置的最初目的。如果 servlet 的 closeIdleSessions 参数在 web.xml 中设置为 true,如“使用 web.xml 部署描述符”中所述,则在 session-timeout 参数指定的超时时间关闭会话及其所有 UI servlet 在最后一个非心跳请求后过期。会话结束后,浏览器将在下一个服务器请求时显示 Out Of Sync 错误。为了避免丑陋的消息,您可能需要为 UI 设置重定向 URL,如“自定义系统消息”中所述。

相关配置参数详见“其他Servlet配置参数”。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2012-07-29
    • 2012-05-17
    相关资源
    最近更新 更多