Sorry but now I'm no longer sure I understood your goals correctly.
If a page is handling a session S1 and gets the refresh, then the new page tries to open a second session S2.
In this scenario, you can only manage to close S1 and let S2 succeed.
Are you trying to achieve somenthing different?

If you agree that S1 is the one that should be closed, then our suggestion is to keep two maps, in addition to the sessions map that you may need for your own purposes:

Code:
    private ConcurrentHashMap<String,Map<String,String>> sessions = new ConcurrentHashMap<String,Map<String,String>>();
    private ConcurrentHashMap<String,String> userInfo = new ConcurrentHashMap<String,String>();
    private ConcurrentHashMap<String,String> sessionUser = new ConcurrentHashMap<String,String>();

    public void notifyNewSession(String user, String session, Map sessionInfo) throws CreditsException, NotificationException {
        assert(! sessions.containsKey(session));
        assert(! sessionUser.containsKey(session));
        if (userInfo.containsKey(user)) {
            throw new ConflictingSessionException(-8, "Previous session termination", null, userInfo.get(user));
        } else {
            sessions.put(session, sessionInfo);
            userInfo.put(user, session);
            sessionUser.put(session, user);
        }
    }

    public void notifySessionClose(String session) throws NotificationException {
        assert(sessions.containsKey(session));
        assert(sessionUser.containsKey(session));
        sessions.remove(session);
        String relatedUser = sessionUser.remove(session);
        userInfo.remove(relatedUser);
    }
Then I see that your code examples involve further processing, like uniquelyIdentifyClient (which now I realize that you borrowed from our chat demo).
Note that I dodn't include them, as I don't know your requirements on those aspects.