AbstractAjaxTimerBehaviour可防止会话过期

时间:2014-09-18 15:51:02

标签: wicket

我的应用程序页面上有一个AbstractAjaxTimerBehaviour,持续时间为2分钟。我的应用程序会话到期时间为30分钟(在web.xml文件中配置)。但是,我的会话无法过期,因为此行为使其保持活动状态。我该怎么做才能解决这个问题?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你可以在AbstractAjaxTimerBehavior中做一些魔术,并使用setMaxInactiveInterval()getLastAccessedTime()HttpSession中尝试一些事情。

例如,如果您处于计时器行为(伪代码):

actualSessionLength = now() - getLastAccessedTime();
session.setmaxInactiveInterval(getMaxInactiveInterval() - actualSessionLength);

但是缩短maxInactiveInterval可能会导致计时器行为太晚。也许你可以在IAjaxCallListener之前做到这一点?在AjaxTimerBehavior之后,您必须再次设置30分钟作为inactiveTimeInterval。

我认为很难实现。

答案 1 :(得分:0)

您可以使用另一个AbstractAjaxTimerBehavior自行使会话无效:

add(new AbstractAjaxTimerBehavior(Duration.seconds(300)) {
    @Override
    protected void onTimer(AjaxRequestTarget target) {

        // Get current page
        Page page = target.getPage();

        // invalidate session
        page.getSession().invalidate();

        // Goto LoginPage
        page.setResponsePage(YourLoginPage.class);
     }
});