我在web.xml中设置了会话超时
<session-config>
<session-timeout>1</session-timeout>
</session-config>
并使用我的httpessionlistener实现跟踪它。我测试并看到每个会话的创建和销毁-它工作得很好。
但是,在我的应用程序中添加推送服务后,等:
xhtml:<p:socket channel="/chat-notif">
<p:ajax event="message" global="false"
update="label-chat-new-msg :f_chat_list :form-chat-conversation" />
</p:socket>
豆:
EventBus eventBus = EventBusFactory.getDefault().eventBus();
eventBus.publish(PUSH_CHAT__MESSAGE, "new-msg");
资源:@PushEndpoint(ChatController.PUSH_CHAT_MESSAGE)
public class ChatMessageResource {
@OnMessage(encoders = { JSONEncoder.class })
public String onMessage(String finis) {
return finis;
}
}
会话永远不会超时,因为推送与客户端页面定期通信并更新会话空闲定时器,即使用户在页面上没有交互。
我应该如何避免更新会话lastAccessedTime上的推送消息?
PF 5.0, Mojarra 2.2.5
谢谢!
发现更新会话计时器的原因:在每个推送消息上,ajax触发backingbean方法-这就是为什么会话lastAccessedTime被更新。将推送服务更改为纯客户端代码:
<p:socket onMessage="handleChatNotif" channel="/chat-notif" />
<script type="text/javascript">
function handleChatNotif(data) {
$('.displayChatNotif').html(data);
}
</script>
<h:outputText styleClass="displayChatNotif" id="label-chat-new-msg" value="#{chatController.chatNotifications}" />
现在一切都发生在客户端,没有请求被发送到web服务器,会话超时定期过期