用户会话超时到期不会因长时间超时而丢弃confirmDialog

时间:2012-02-07 13:16:36

标签: java jsf primefaces session-timeout

我在执行用户会话超时到期时遇到问题。在我们的项目中,我们使用JSF作为Web设计框架,将Primefaces用作Facelet组件。我在开发中开发了以下代码:

    <p:idleMonitor onidle="idleDialog.show();" rendered="#{loginBean.loggedIn}" timeout="#{loginBean.activeUser.userTimeOut}" />
        <p:confirmDialog header="#{lang.signOut}" message="#{lang.signOutMess}" widgetVar="idleDialog" modal="true" closable="false" appendToBody="true" >
            <p:button outcome="logout.xhtml" value="#{lang.signOut}"/>
        </p:confirmDialog>

以上代码完美适用于短暂超时的用户,例如1-20分钟。它会使用signOutMess自动抛出确认对话框。但是,相同的代码不适用于具有更高超时(例如一小时)的用户。它不会抛出确认对话框,而是从系统中注销用户。实际上,例如,如果具有超时的用户 - 一小时时间进入系统中的一个屏幕并在该帧上保持空闲一小时,则屏幕不会更改,但是当用户尝试在系统上打开另一个帧时,它直接指向实际上是目标的logout.xhtml并让用户从系统中退出,但我想再说一遍,它不会抛出confirmDialog。

你的朋友会建议我为那个案子做什么?

你真诚的......

1 个答案:

答案 0 :(得分:0)

也许你误解了idleTimeout组件实际上在做什么。它本质上是一个客户端计时器,可以在指定的不活动时间间隔后执行服务器端回发或客户端事件。从技术上讲,这可以用来帮助保持用户会话活跃。

问题是,如果在指定的时间段内没有服务器端活动,则服务器上的用户会话将根据Web应用程序或服务器设置超时。如果会话在服务器上超时,则idleMonitor不会突然开始工作。

如果20分钟不可接受,您可以在Web服务器上增加会话超时设置。