无法使用HttpSession作为密钥从HashMap检索值

时间:2013-03-12 06:46:29

标签: java hashmap httpsession

我有一个HashMap,我将HttpSession对象作为Key并将HashSet作为值

HashMap<HttpSession, HashSet<String>> map = new HashMap<HttpSession, HashSet<String>>();

我有一个HttpSession监听器,我需要检查地图中是否存在天气会话对象

public void sessionDestroyed(HttpSessionEvent se) {
    HashMap<HttpSession, HashSet<String>> map = //Get map object
    HttpSession session = se.getSession();
    if(map.containsKey(session)){
        //TODO Code goes here
    }
}

IF条件总是返回false,即使会话对象在地图中可用(手动检查地图条目)。我被困了!!!

1 个答案:

答案 0 :(得分:2)

如果在先前的请求中将值放入地图中,则您现在拥有的HttpSession对象不一定与地图中的对象相同(即使它们代表相同的会话)。不需要同一会话的两个表示(AFAIK)为equals或具有相同的hashCode,这将破坏地图。

您可以尝试使用session.getId()值作为密钥。