[英]Tomcat persistent and user specific session counter
我需要使持久性和特定于用户的会话计数器。 我做的
package my.package;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
public class SessionCounter implements HttpSessionListener {
private static HashMap activeSessions;
public SessionCounter() {
//How to restore session count?
activeSessions = new HashMap();
}
public void sessionCreated(HttpSessionEvent se) {
HttpSession session = se.getSession();
String userName = session.getAttribute("username");
Integer count = (Integer) activeSessions.get(userName);
if (count != null) {
activeSessions.put(userName, Integer.valueOf(count.intValue() + 1));
} else {
activeSessions.put(userName, new Integer(1));
}
}
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
String userName = session.getAttribute("username");
Integer count = (Integer) activeSessions.get(userName);
if (count != null && count.intValue() > 0) {
activeSessions.put(userName, Integer.valueOf(count.intValue() - 1));
}
}
public static HashMap getActiveSessions() {
return activeSessions;
}
}
即使重新启动tomcat,会话仍处于活动状态,但是存储在我的activeSessions变量中的会话计数丢失了。 重新启动后如何还原会话计数?
当Tomcat关闭(即通过关闭脚本而不是通过终止进程)时,所有会话都将在下次启动时进行序列化和还原。
HttpSessionListener将始终被重新创建,因此您的HashMap将被新实例化,并且信息将丢失。 您将必须编写一个实现可序列化的模型,该模型可保存您的数据,并在Tomcat关闭时将其存储到磁盘。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.