首页 > 代码库 > 通过 监听器获取sessionId

通过 监听器获取sessionId

 1 package shopping; 2  3 import java.util.HashMap; 4 import java.util.Map; 5  6 import javax.servlet.http.HttpSession; 7 import javax.servlet.http.HttpSessionEvent; 8 import javax.servlet.http.HttpSessionListener; 9 /**10  * 通过sessionId获取session11  * HttpSessionListener:创建一个监听器监听session的创建和摧毁12  * 13  * 如果用户重新新建了一个浏览器窗口,这样也可以解决了14  * 15  */16 public class SiteSession implements HttpSessionListener {17     //静态变量能够一直保存18     /*19      * String:sessionId20      * session如果超时不能被垃圾回收器所回收,因为一直被静态变量所引用,将不会被回收21      * 如果超时希望删除session的话,需要通过静态变量 Map<String,HttpSession> sessions来解决sessionDestroyed方法,以防止内存泄漏22      */23     private static Map<String,HttpSession> sessions = new HashMap<String,HttpSession>();24     25     public void sessionCreated(HttpSessionEvent sessionEvent) {26         sessions.put(sessionEvent.getSession().getId(), sessionEvent.getSession());27     }28 29     public void sessionDestroyed(HttpSessionEvent sessionEvent) {30         sessions.remove(sessionEvent.getSession().getId());31     }32     33     /**34      * 只要知道用户的sessionId 就可通过该方法获取原先用户的session35      * @param sessionID :session的id号36      * @return37      */38     public static HttpSession getSession(String sessionID){39         return sessions.get(sessionID);40     }41 42 }
1  <!-- 监听器配置  监听session的创建和关闭-->2   <listener>3       <listener-class>shopping.SiteSession</listener-class>4   </listener>
 1 如果acion采用: 2 request.getSession().getAttribute("cart",new Date()); 3 的方式打开两个浏览器窗口的话,将不能获取同一个session对象 4  5 解决办法: 6 String sId = request.getParameter("sessionId"); 7 HttpSession session = SitSessionListener.getSession(sId); 8 if(session == null ){ 9     request.getSession().setAttribute("cart",new Date);10 }else{11     session().getAttribute("message",session.getAttribute("cart"));12 }13 就可以解决打开两个窗口但捕获的不是同一个session

 

 

通过 监听器获取sessionId