Websockets:在页面重新加载时恢复会话

时间:2014-02-14 14:40:36

标签: java javascript session websocket jetty

我想: 不在F5上注销用户。我将用户的会话ID存储在cookie中,我想在F5上更新会话。

我在服务器端使用: Peer类来安排通信。一个浏览器的标签 - 一个同伴。要更新会话客户端,只需在他登录后存储sessionId。之后如果客户想要在aonther选项卡上续订会话,他只需询问服务器id = sessionId中是否有CORE.peers的同行采集。如果是 - 会话恢复。

public class Peer implements WebSocketListener {
  private org.eclipse.jetty.websocket.api.Session session;
  private int id;

  public void onWebSocketText(String s) {
    //handle request and send response via sesion
  }

  public void onWebSocketClose(int i, String s) {
    CORE.peers.add(this);
  }

  public void onWebSocketConnect(org.eclipse.jetty.websocket.api.Session session) {
    CORE.peers.remove(this);
  }

  public void onWebSocketError(Throwable throwable) {
    //...
  }
}

问题: 的 每次用户按F5 - websocket发送EOF消息并调用onWebSocketClose方法。因此,用户sessionId的同行将从CORE.peers中移除;并且用户将无法续订其会话(意味着用户将被注销)。

另一方面,我根本不能停止删除服务器端的对等端。

问题: 如何在服务器端决定删除同行?

1 个答案:

答案 0 :(得分:1)

  

问题:如何在服务器端决定删除同行?

在浏览器应用程序中,客户端可能会在没有明确注销的情况下消失。

通常会对此进行处理,以便除了显式注销外,如果客户端在最后x分钟内没有调用服务器(x通常为10或15分钟),也会被视为已注销。

如果您希望客户端保持登录的时间超过该时间,则只要浏览器停留在当前网站上,客户端就可以每隔(x-1)分钟进行一次“保持活动”呼叫。