代码之家  ›  专栏  ›  技术社区  ›  Harita Parmar

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

  •  0
  • Harita Parmar  · 技术社区  · 6 年前

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Tatu Lund    6 年前

    我建议将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的心跳监控导致服务器请求,会话保持活动状态。一旦所有的用户界面都过期,会话仍将保留。当Web应用程序中配置的会话超时时间到期时,它将从服务器中清除。

    如果应用程序中有活动的UI,那么它们的心跳将无限期地保持会话的活动状态。如果用户处于非活动状态的时间足够长,您可能希望会话超时,这是会话超时设置的原始目的。如果servlet的closeidlesessions参数在web.xml中设置为true,如“使用web.xml部署描述符”中所述,当servlet的session timeout参数指定的超时在最后一个非心跳请求之后过期时,会话及其所有uis都将关闭。。会话结束后,浏览器将在下一个服务器请求上显示不同步错误。为了避免出现难看的消息,您可能需要为uis设置重定向URL,如“自定义系统消息”中所述。

    相关配置参数在“其他servlet配置参数”中描述。

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