2014-02-14 69 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)分鐘進行一次「保持活動狀態」的呼叫,只要瀏覽器停留在當前網站上即可。