2014-02-14 40 views
0

我想要:未在F5上注销用户。我将用户的会话ID存储在cookie中,并且我想在F5上更新会话。Websockets:恢复页面上的会话

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

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 - 网页套接字发送EOF信息和onWebSocketClose方法被调用。因此 - 与用户的sessionId同行将从CORE.peers中删除;用户将无法更新他的会话(意味着用户将被注销)。

另一方面,我不能停止删除服务器端的同龄人。

问:我应该如何决定在服务器端时,除去同行?

回答

1

问题:我该如何决定在服务器端何时删除对等点?

在浏览器应用程序中,客户端可以在没有显式注销的情况下消失。

通常这样处理,除了显式注销之外,如果客户端在最后x分钟内(x通常为10或15分钟)还没有向服务器发出调用,也会被视为退出。

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