Session 了解websocket会话中的超时

Session 了解websocket会话中的超时,session,websocket,spring-websocket,httpsession,Session,Websocket,Spring Websocket,Httpsession,websocket会话包装在http会话中,因此当http会话超时时,websocket会话也会超时 但是,当只有第一个调用是基于会话cookie的http调用,其余时间是直接建立的连接时, 在超时情况下,连接如何关闭 场景-我们有一个反向代理来管理会话的验证检查。这意味着它会拦截每个调用并检查会话的有效性。 如果cookie过期,它将返回401 因为我已经将websocket集成到这个系统中,所以最初的websocket调用使用有效的cookie通过这个反向代理,将请求升级到websocket

websocket会话包装在http会话中,因此当http会话超时时,websocket会话也会超时

但是,当只有第一个调用是基于会话cookie的http调用,其余时间是直接建立的连接时, 在超时情况下,连接如何关闭

场景-我们有一个反向代理来管理会话的验证检查。这意味着它会拦截每个调用并检查会话的有效性。 如果cookie过期,它将返回401

因为我已经将websocket集成到这个系统中,所以最初的websocket调用使用有效的cookie通过这个反向代理,将请求升级到websocket,然后再升级 继续直接发送消息。反向代理不知道通过WS发送的这些直接消息

现在,当http会话到期时,对系统进行的其他调用将获得401。但是,上面的WS-connection根本不知道它,并且继续发送/接收消息

在注销的情况下,http会话会调用invalidate,因此所有绑定的对象都会得到通知,我会得到一个SessionDisconnectEvent。然而,在超时的情况下,我没有任何指示。 在这种情况下,我应该如何终止WS连接


Stack-spring+sockJS+basic stomp

我的观察是,所有绑定到http会话的websocket会话在注销时都不会终止。只有发起注销的用户才能获得SessionDisconnectMessage

如果超时,则根本没有指示

为了处理超时,我在客户端收到消息后不久就给服务器打了一个电话,并在这个电话中查找401。如果返回401,我将在客户端启动会话关闭

为了处理注销,我维护了http会话id和与之相关的所有websocket会话的映射。当我在任何websocket会话上收到断开连接时,我将终止与该http会话关联的所有其他ws会话