需要BayeuxServer.Session Listener

时间:2017-02-08 11:47:35

标签: cometd

我想在我的网络应用中保留有关我登录用户的信息;所以,例如,我将一个标识符传递给ServerMessage中的SessionListener.sessionAdded,并使用该标识符将用户信息加载到持久散列中。

同样,当会话被销毁时,我想在调用SessionListener.sessionRemoved时从散列中擦除客户端信息。但是,没有消息。我可以使用ServerSession.getUserAgent(),它返回的是什么字符串?

或者,每个会话是否有一个SessionListener,以便我可以在SessionListener中本地保存电子邮件,以便在调用sessionRemoved时使用?

1 个答案:

答案 0 :(得分:0)

你有2个选择。

使用会话属性:

class MySessionListener implements BayeuxServer.SessionListener {
    public void sessionAdded(ServerSession session, ServerMessage message) {
        session.setAttribute("token", message.getDataAsMap().get("token"));
    }
    public void sessionRemoved(ServerSession session, boolean timedout) {
        String token = (String)session.getAttribute("token");
        // Use the token here.
    }
}

或使用RemoveListener

class MySessionListener implements BayeuxServer.SessionListener {
    public void sessionAdded(ServerSession session, ServerMessage message) {
        final String token = (String)message.getDataAsMap().get("token");
        session.addListener(new RemoveListener() {
            public void removed(ServerSession session, boolean timeout) {
                // Use token here.
            }
        });
    }
    public void sessionRemoved(ServerSession session, boolean timedout) {
        // Nothing to do here.
    }
}