JavaScript中的Wicket 6无效会话
我正在开发一个Wicket应用程序,当用户关闭浏览器或单击指向其他站点的链接时,该应用程序需要注销用户。我找到了RoSch的答案,这是一个很好的基础。不过,我现在的问题是使用这种调用javascript的能力使会话无效。 这是我在js调用中尝试使会话无效:JavaScript中的Wicket 6无效会话,javascript,session,wicket,Javascript,Session,Wicket,我正在开发一个Wicket应用程序,当用户关闭浏览器或单击指向其他站点的链接时,该应用程序需要注销用户。我找到了RoSch的答案,这是一个很好的基础。不过,我现在的问题是使用这种调用javascript的能力使会话无效。 这是我在js调用中尝试使会话无效: public class PageExitBehaviour extends Behavior{ @Override public void renderHead(Component component, IHeaderResponse r
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()吗?或者有人知道关闭浏览器窗口时注销用户的其他方法吗?由于会话是在服务器端管理的,因此当用户离开页面时,您必须向服务器发送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();
}
}
让我知道这是否适用于您。这非常适用,非常感谢您,感谢您对需要AJAX的说明。你好,Tom,我想知道您的方法是否也适用于浏览器端打开多选项卡的Wicket web应用程序。当用户关闭整个浏览器屏幕而不只是打开其中一个选项卡时,如何实现相同的机制?非常感谢:)