首页 > 代码库 > 通过 监听器获取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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。