GWT:如何在关闭浏览器时关闭会话

GWT:如何在关闭浏览器时关闭会话,gwt,Gwt,在我的GWT应用程序中,如果用户关闭浏览器,我将尝试清除会话 我正在做的是关闭调用rpc的处理程序,使会话无效, 但是rpc调用从未发生,浏览器也关闭了。 如果还有其他解决办法的话 Window.addWindowClosingHandler(new ClosingHandler(){ @Override public void onWindowClosing(ClosingEvent event) { signOut();

在我的GWT应用程序中,如果用户关闭浏览器,我将尝试清除会话

我正在做的是关闭调用rpc的处理程序,使会话无效, 但是rpc调用从未发生,浏览器也关闭了。 如果还有其他解决办法的话

  Window.addWindowClosingHandler(new ClosingHandler(){

        @Override
        public void onWindowClosing(ClosingEvent event) {

            signOut();
        }

        });

  public void signOut() {
    rpcService.signOut(new AsyncCallback<String>(){

        @Override
        public void onFailure(Throwable caught) {
        }

        @Override
        public void onSuccess(String result) {

            History.newItem("login");
        }});
}

   public String signOut(){
    session = request.getSession();
    session.invalidate();
    return "loggedout";

}
Window.addWindowClosingHandler(新的ClosingHandler(){
@凌驾
窗口关闭时公共无效(ClosingEvent事件){
签出();
}
});
公共无效签出(){
注销(新的AsyncCallback(){
@凌驾
失败时的公共无效(可丢弃){
}
@凌驾
成功时的公共void(字符串结果){
历史记录。新项目(“登录”);
}});
}
公共字符串签出(){
session=request.getSession();
session.invalidate();
返回“loggedout”;
}

它应该能工作。试一试

Window.addCloseHandler(new CloseHandler<Window>() {
            @Override
            public void onClose(CloseEvent<Window> event) {

               }
        });
Window.addCloseHandler(新的CloseHandler(){
@凌驾
公共void onClose(CloseEvent事件){
}
});

AFAIK不要使用
Window.addWindowClosingHandler
,因为它甚至会调用关闭弹出窗口。“Window.addCloseHandler”在浏览器关闭时被调用。

尝试过,相同的beehavior.。它到达了signOut方法,但从未进行过RPC调用,控制台说:远程连接lostI实现了相同的功能,并且工作正常。你能在
signOut()之后进行一些等待调用吗调用的方法。然后检查发生了什么。你的意思是你可以调用RPC,RPC成功,然后你的浏览器关闭?不,这永远不会发生。正如您所知,RPC调用是异步的。你永远不会得到成功的电话,然后关闭窗口。它将在完成rpc之前关闭,但已到达服务器。正当我们不担心客户端会话。我只需要清除服务器会话。然后,若用户再次打开相同的应用程序。然后应该有一个调用来检查服务器会话是否存在。若有,那个么直接重定向到主页其他明智的登录页面,并创建新的会话。在我的情况下,它甚至并没有到达服务器