我可以过期用户的所有会话吗?
我知道我可以通过使用session.invalidate()
到期session
。我可以过期用户的所有会话吗?
我正在使用Tomcat,servlet/JSP。
在会议中我有一个属性userId
。
在此基础上,我们定义此session
属于特定用户。
我有一种需要,我必须使包含特定userId的所有会话无效。
我可以过期用户的所有会话吗?
我知道我可以通过使用session.invalidate()
到期session
。我可以过期用户的所有会话吗?
我正在使用Tomcat,servlet/JSP。
在会议中我有一个属性userId
。
在此基础上,我们定义此session
属于特定用户。
我有一种需要,我必须使包含特定userId的所有会话无效。
使用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...
}
}
好答案voteedup。 。 .sessionDestroyed()在每次我们销毁会话时都会加载并调用。 。只有当我们想销毁所有会话时,我们才可以重载它 – 2013-05-14 07:56:48
它在HttpSessionListener接口中,您必须实现它,至少是声明。 – CloudyMarble 2013-05-14 07:59:07
由于HashMap不是线程安全的类,因此该代码不是线程安全的。 此外,“地图”永远不会被清除,因此会话将永远留在内存中,导致内存泄漏。 – 2015-07-27 18:22:07
通过执行HttpSessionListener
来创建列表器,并将每个创建的会话添加到数据结构中。 。如地图或列表
对于地图使用SessionId as Key
和session object
作为值。 。 。 。当通过容器创建的任何会话
覆盖既sessionCreated(HttpSessionEvent event)
和sessionDestroyed(HttpSessionEvent event)
sessionCreated(HttpSessionEvent event)
方法被调用。 。我们可以在这个创作时间做我们想做的事情。 。像添加列表或地图
sessionDestroyed(HttpSessionEvent event)
当会话被破坏或无效(通过代码或服务器超时)时被调用。 。我们可以在破坏之前做任何事情。 。 。比如总记录时间。 。从列表或地图中删除。 。 etc
您可以创建一个'HttpSessionListener',并将每个创建的会话添加到某个'List'并放入'context'中。然后遍历'List'来获得每个'session'检查它的属性和'invalidate()'! – NINCOMPOOP 2013-05-14 07:33:37
您可以使所有会话值为空。 – 2013-05-14 07:50:20