Session 即使我在页面上进行交互,会话也会丢失
我正在使用primefaces 3.4.2 Javax.faces 2.1.9 My web.xmlSession 即使我在页面上进行交互,会话也会丢失,session,jsf,primefaces,Session,Jsf,Primefaces,我正在使用primefaces 3.4.2 Javax.faces 2.1.9 My web.xml <session-config> <session-timeout>45</session-timeout> </session-config> <p:idleMonitor id="idMonitorSession" timeout="2400000" onidle="dlgMensajeSessi
<session-config>
<session-timeout>45</session-timeout>
</session-config>
<p:idleMonitor id="idMonitorSession" timeout="2400000"
onidle="dlgMensajeSessionExp.show()" />
<p:dialog header="Sesion Ended" resizable="false"
widgetVar="dlgMensajeSessionExp" width="300" height="120"
modal="true" closable="false" appendToBody="true">
<center>
<h:outputText value="Session Ended" />
<h:form id="sessionForm">
<h:commandLink actionListener="#{user.exit()}">
<h:graphicImage style="border:0px" value="/resources/images/login.png"
width="80px" />
</h:commandLink>
</h:form>
</center>
</p:dialog>
45
然而,即使我在页面中工作,会话也会丢失,你知道为什么会发生这种情况吗
Web服务器是Websphere 7.0.0.17与页面交互的方式,服务器不会通过ajax调用,或者完整的表单post不会针对会话服务器端重置超时。将ajax事件用于idleMonitor应该可以做到这一点
<p:idleMonitor id="idMonitorSession" timeout="2400000"
onidle="dlgMensajeSessionExp.show()">
<p:ajax event="active"/>
</p:idleMonitor>
编辑:我注意到移动鼠标时不会触发“活动”事件,用户需要与页面进行足够的交互以触发此事件。如果保持服务器与页面同步非常重要,那么ajax调用的频率将比此事件创建的频率更高。您不必在服务器端调用noop操作,设置事件类型就足够了
另一种可能是在发生表明用户正在积极使用页面的交互类型时使用ajax事件。例如,在文本区域中键入长消息或过滤大数据表
<p:ajax event="filter" listener="#{bean.activeListener}"/>
无论哪种方式,目标都是让服务器意识到用户确实处于活动状态,而不会让服务器充斥不必要的ajax事件。您如何在页面上进行交互?idleMonitor是一个纯客户端的东西。如果没有向服务器发送任何内容,则会话通常会过期。因此,您显示的代码和看到的行为如下expected@Kukeltje我应该添加并调用一个方法来刷新吗?你认为应该在哪里添加它?为什么?请创建一个
侦听器
对于作业是必需的吗?理论上,只要
就足够了。或者,如果
处于活动状态已经是
@BalusC的默认事件,您可以正确地认为不需要直接操作调用。我无法逃脱,就像我使用的技术堆栈在运行时不允许那样。