0

我正在开发一个 Wicket 应用程序,该应用程序需要在用户关闭浏览器或单击另一个站点的链接时注销用户。在显示消息和 rotsch 的答案后,我发现了Invalidate Wicket session ,这是一个很好的基础。不过,我现在的问题是使用这种能力来调用 javascript 来使会话无效。这是我在 js 调用中尝试使会话无效:

public class PageExitBehaviour extends Behavior{

@Override
public void renderHead(Component component, IHeaderResponse response) {
    super.renderHead(component, response);
    response.render(new OnDomReadyHeaderItem("window.onbeforeunload = function (e) {"
            + "getSession().invalidate();" + "};"));

}

有谁知道在“window.onbeforeunload =”之后放入什么以使其调用getSession().invalidate()?或者有人知道在关闭浏览器窗口时注销用户的其他方法吗?

4

1 回答 1

2

由于会话是在服务器端管理的,因此当用户离开页面时,您必须向服务器发送 AJAX 请求。下面的 Behavior 实现就是这样做的。

public class PageExitLogoutBehavior extends AbstractDefaultAjaxBehavior {

  @Override
  public void renderHead(Component component, IHeaderResponse response) {
    super.renderHead(component, response);
    response.render(new OnDomReadyHeaderItem(String.format(
            "window.onbeforeunload = function(e){ %s };",
            this.getCallbackScript())));
  }

  @Override
  protected void respond(AjaxRequestTarget target) {
    System.out.println("logging out...");
    target.getPage().getSession().invalidate();
  }

}

让我知道这是否适合你。

于 2013-06-06T18:26:36.320 回答