1.实现session的监听器,主要有2个override方法,session生成和删除。
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class EgoSessionListener implements HttpSessionListener { private EgoSessionContext context = EgoSessionContext.getInstance(); @Override public void sessionCreated(HttpSessionEvent sessionEvent) { System.out.println("session创建了 " + sessionEvent.getSession().getId()); context.addSession(sessionEvent.getSession()); } @Override public void sessionDestroyed(HttpSessionEvent sessionEvent) { HttpSession session = sessionEvent.getSession(); System.out.println("session被删除了 " + sessionEvent.getSession().getId()); context.delSession(session); } }
2.写个类来保存所有的session,并提供查sessionId的方法。
import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpSession; public class EgoSessionContext { private static EgoSessionContext instance = new EgoSessionContext(); private Map<String, HttpSession> sessionMap; private EgoSessionContext() { sessionMap = new HashMap<String, HttpSession>(); } public static EgoSessionContext getInstance() { return instance; } public synchronized void addSession(HttpSession session) { if (session != null) { sessionMap.put(session.getId(), session); } } public synchronized void delSession(HttpSession session) { if (session != null) { sessionMap.remove(session.getId()); } } public synchronized HttpSession getSession(String sessionId) { if (sessionId == null) return null; return sessionMap.get(sessionId); } }