如何从 Web 管理面板中删除用户 sessionId?我的意思是,我有多个用户使用 jboss 4.2 和 struts 1.3 进入一个网站,我想从同一个网站远程关闭其中一些用户的 session 。最佳策略是什么?
一种可能的解决方案是将 JSESSIONID 关联到数据库中的用户并设置 JSESSIONID。然后对于每个事务询问我是否删除用户 session 。
我尝试通过在 jboss 端使用 context.xml 和 FileStore session 来处理它,但是如果我删除 session 文件(例如 2B6609A6CA38E35EEDF21BF3F3253BC8.session), session 仍然处于 Activity 状态。
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">
<Store className="org.apache.catalina.session.FileStore" directory="\tmp\">
</Store>
</Manager>
有什么建议吗?谢谢
最佳答案
其中一种方法是在 HttpSessionListener
的帮助下自己收集这些 session :
public class SessionManager implements HttpSessionListener {
private static Map<String, HttpSession> sessions = new ConcurrentHashMap<String, HttpSession>();
@Override
public void sessionCreated(HttpSessionEvent event) {
sessions.put(event.getSession().getId(), event.getSession());
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
sessions.remove(event.getSession().getId());
}
public static boolean invalidate(String sessionId) {
HttpSession session = sessions.get(sessionId);
if (session != null) {
session.invalidate();
return true;
} else {
return false;
}
}
}
它允许您在网络管理面板的代码中执行类似的操作:
SessionManager.invalidate(someSessionId);
也许您已经在使用 HttpSessionListener
将 session 与数据库同步。这样一来就完全多余了。
关于Java Remote 终止用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099846/