我正在开发一个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()?或者有人知道在关闭浏览器窗口时注销用户的其他方式吗?
答案 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();
}
}
请告诉我这是否适合您。