我可以过期用户的所有会话吗?
我知道我可以使用session
使session.invalidate()
到期。
我正在使用Tomcat,servlet / JSP。
在会话中,我有一个属性userId
。
在此基础上,我们定义此session
属于特定用户。
我需要使包含特定userId的所有会话无效。
答案 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 Key
和session object
作为值。 。 。 。
覆盖sessionCreated(HttpSessionEvent event)
和sessionDestroyed(HttpSessionEvent event)
sessionCreated(HttpSessionEvent event)
方法。 。我们可以在创建时做任何我们想做的事情。 。喜欢添加列表或地图
sessionDestroyed(HttpSessionEvent event)
。 。在毁灭之前我们可以做任何事情。 。 。比如总记录时间。 。从列表或地图中删除。 。等
答案 2 :(得分:0)
您可以将所有会话值设为空..
session.removeAttribute("userId");