我可以过期用户的所有会话吗?

时间:2013-05-14 07:30:26

标签: java session java-ee tomcat servlets

我可以过期用户的所有会话吗? 我知道我可以使用session使session.invalidate()到期。

我正在使用Tomcat,servlet / JSP。

在会话中,我有一个属性userId

在此基础上,我们定义此session属于特定用户。

我需要使包含特定userId的所有会话无效。

3 个答案:

答案 0 :(得分:6)

使用this code管理您的活动会话并按其ID获取会话,然后您可以调用此会话并在需要时使其无效:

 public class SessionListener implements HttpSessionListener  
{  

     private static Map<String, HttpSession> map = new   
                                     HashMap<String, HttpSession>();  

    public void sessionCreated(HttpSessionEvent event)  
    {  
        String id = event.getSession().getId();  
        logger.debug("session created : " + id);  
        // STORE THE SESSOIN FOR EXAMPLE IN DATABASE 
        map.put(id, event.getSession());  
    }  

    public static HttpSession getHttpSession(String sessionID)  
    {  
        return sessionObjectMap.get(sessionID);  
    }  

    public void sessionDestroyed(HttpSessionEvent event)  
    {  
        // get the destroying session...               
    }  
} 

答案 1 :(得分:1)

通过实施HttpSessionListener创建一个列表器,并将每个创建的会话添加到数据结构中。 。像地图或列表

将地图用作SessionId as Keysession object作为值。 。 。 。

覆盖sessionCreated(HttpSessionEvent event)sessionDestroyed(HttpSessionEvent event)

当容器创建任何会话时,将调用

sessionCreated(HttpSessionEvent event)方法。 。我们可以在创建时做任何我们想做的事情。 。喜欢添加列表或地图

会话被破坏或失效时(无论是代码还是服务器超时)都会调用

sessionDestroyed(HttpSessionEvent event)。 。在毁灭之前我们可以做任何事情。 。 。比如总记录时间。 。从列表或地图中删除。 。等

答案 2 :(得分:0)

您可以将所有会话值设为空..

session.removeAttribute("userId");