【问题标题】:Session is expired even though websocket connection is live [closed]即使 websocket 连接处于活动状态,会话也已过期[关闭]
【发布时间】:2014-11-30 14:40:17
【问题描述】:

我的要求如下:

  1. 使用应用程序登录。
  2. 成功登录时打开 websocket 连接
  3. 通过 websocket 双向交换数据,但没有通过 HTTP 直接通信

我在 web.xml 中配置了 session-timeout > 15mins。即使 websocket 连接是活动的,但会话已终止。

【问题讨论】:

    标签: java session tomcat websocket java-ee-7


    【解决方案1】:

    Java websocket 规范中有一个错误,Websocket 消息握手不会更新访问时间。因此,如果我们在任何符合 Java 规范的服务器中指定过期策略,则不会更新 websocket 消息交换的访问时间。因此,建议设置更高的过期值或无限会话过期时间。

    参考资料: 雄猫票:https://issues.apache.org/bugzilla/show_bug.cgi?id=54738 Java 规范票:https://java.net/jira/browse/WEBSOCKET_SPEC-175

    【讨论】:

      【解决方案2】:

      您必须找到一种在 java 中推动会话滑动到期的方法。由于没有执行新的 HTTP 请求,因此如果您不执行任何操作,会话将过期。

      每次通过websocket收到消息时,尝试用值调用setMaxInactiveInterval,它可能会重置tiemr。

      干杯。

      【讨论】:

      • 我在 websocket 通信期间没有 HttpSession 的实例。那么我该如何重置计时器呢?
      猜你喜欢
      • 1970-01-01
      • 2021-05-23
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多