JSF会话超时和primefaces推送

时间:2014-06-10 10:57:11

标签: jsf session primefaces atmosphere

我在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

谢谢!

1 个答案:

答案 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服务器,会话超时定期到期。