2014-09-18 114 views
0

我的应用程序上有一个页面,其中有一个持续2分钟的AbstractAjaxTimerBehaviour。我的应用程序会话过期时间为30分钟(在web.xml文件中配置)。但是,我的会话不能过期,因为这种行为使它保持活跃状态​​。我能做些什么来解决这个问题?AbstractAjaxTimerBehaviour防止会话过期

感谢您的任何帮助。

回答

0

你可以做一些魔术,并在AbstractAjaxTimerBehavior和尝试HttpSessionsetMaxInactiveInterval()getLastAccessedTime()一些事情。

例如,如果你是在计时器的行为(伪代码):

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

但它可能是在计时器行为来不及缩短maxInactiveInterval。也许你可以早些在IAjaxCallListener?在AjaxTimerBehavior之后,你必须再次设置30分钟作为inactiveTimeInterval。

我认为这将很难实现。

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