我在web.xml中设置了会话超时
<session-config>
<session-timeout>1</session-timeout>
</session-config>
并使用我的HttpSessionListener实现跟踪它。我测试并看到每个会话的创建和销毁 - 它工作正常。
但是,在我的应用中添加推送服务之后:
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
谢谢!
答案 0 :(得分:1)
找到更新会话计时器的原因:在每个推送消息上,ajax正在触发bootbean方法 - 这就是更新会话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服务器,会话超时定期到期。