【问题标题】:CometD long polling making session to never time outCometD 长轮询使会话永不超时
【发布时间】:2013-03-20 01:55:36
【问题描述】:

我在 ui 端使用 ExtJs + CometD,并在我的应用程序中使用 Spring + Jetty 作为后端。用户使用 spring 身份验证管理器 (j_spring_security_check) 进行身份验证。 正常的 http 请求使用特定的 url 模式 (/myapp),而 cometd 通信使用不同的 url 模式 (/cometd)。

我在服务器上将会话超时值设置为 30 分钟。一旦用户登录,CometD 活动就会开始(如握手、连接等)。我正在为 cometD 提供 Bayex 传输,以用作 WebSocket 和长轮询。对于不支持 WebSocket 的浏览器,CometD 通信使用长轮询机制进行。

问题是由于 CometD 客户端的长轮询,当 CometD 长轮询的心跳到达时,服务器上的会话超时计数器总是会重置。因此,会话在服务器上永远不会超时。

如果请求来自特定 URL(在我的情况下是 cometD url),是否有办法避免重置会话的会话超时值。

另外,如果我可以删除 CometD 发送到服务器的 HTTP 标头中的 JSSIONID 参数,是否有可能。可能如果我可以从 http 标头中删除 JSESSIONID,那么服务器将不会重置该会话的超时计数器。

谢谢,
布里杰

【问题讨论】:

    标签: session timeout polling cometd


    【解决方案1】:

    这已在 CometD 邮件列表中提出,请参阅 https://groups.google.com/forum/?fromgroups=#!topic/cometd-users/xoTRl3lL9_o

    投票给http://bugs.cometd.org/browse/COMETD-416,它可能包含在 CometD 2.6.0 中。

    【讨论】:

    • 以上链接提供了一些关于断开 CometD 会话的信息,以防在特定时间间隔内 CometD 客户端和 CometD 服务器之间没有任何活动。我的要求是避免由于 cometD 长轮询连接请求而重置 http 会话超时计时器。所以,我的 http 会话超时将优先,当它超时时,我也可以断开 cometD 连接。当http会话超时时,我已经有断开cometD连接的逻辑。但问题是 HTTP 会话不会因为 cometD 轮询而超时。
    • @brij 正是因为 CometD 继续长轮询,您的 HTTP 会话永远不会空闲。
    • @brij 正是因为 CometD 继续长轮询,您的 HTTP 会话永远不会空闲。如果您有办法检测 CometD 空闲(不包括长轮询),那么您可以断开 CometD 会话,然后让 HTTP 会话超时。我不知道有什么标准方法可以避免 servlet 容器在每次收到请求时都重置 HTTP 会话空闲计时器。您不应该在 CometD 应用程序中使用 HTTP 会话:如果将来您的 CometD 传输将是 WebSocket,那么您已经使用 HTTP 会话将您的应用程序绑定到 HTTP,并且很难使用 WebSocket。
    【解决方案2】:

    您需要使用活动扩展。请点击链接

    http://docs.cometd.org/3/reference/#_extensions_activity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-21
      • 2013-12-11
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多