Wicket 6在JavaScript中使会话无效

时间:2013-06-05 15:56:50

标签: javascript session wicket

我正在开发一个Wicket应用,需要在关闭浏览器或点击指向其他网站的链接时注销用户。我找到了Invalidate Wicket session after displaying message和rotsch的答案,这是一个很好的基础。不过,我现在的问题是使用该功能来调用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()?或者有人知道在关闭浏览器窗口时注销用户的其他方式吗?

1 个答案:

答案 0 :(得分:2)

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

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();
  }

}

请告诉我这是否适合您。