2013-06-05 55 views
0

我正在開發一個Wicket應用程序,當他們關閉瀏覽器或單擊指向另一個站點的鏈接時,需要註銷該用戶。我發現Invalidate Wicket session after displaying message和rotsch的答案,這是一個很好的基礎。現在我的問題是,使用該功能調用JavaScript來使會話無效。 這是我嘗試在JS調用無效會話:Wicket 6在JavaScript中使會話失效

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()無效()。?還是有人知道一些其他方式來註銷用戶時關閉瀏覽器窗口?

回答

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

} 

讓我知道,如果這對你有用。

+0

完美的工作,非常感謝你,並感謝有關需要AJAX的澄清。 –