zoukankan      html  css  js  c++  java
  • 通过 监听器获取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获取session
    11  * HttpSessionListener:创建一个监听器监听session的创建和摧毁
    12  * 
    13  * 如果用户重新新建了一个浏览器窗口,这样也可以解决了
    14  * 
    15  */
    16 public class SiteSession implements HttpSessionListener {
    17     //静态变量能够一直保存
    18     /*
    19      * String:sessionId
    20      * 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 就可通过该方法获取原先用户的session
    35      * @param sessionID :session的id号
    36      * @return
    37      */
    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
  • 相关阅读:
    python json.dumps() json.dump()的区别
    geopy 在python中的使用
    socket技术详解(看清socket编程)
    数据结构之各种数据结构插入、删除、查找的时间复杂度
    数组查找的时间复杂度正确表述
    各种排序算法时间复杂度
    MySQL将一张表的某些列数据,复制到另外一张表,并且修改某些内容
    Java虚拟机学习
    Java虚拟机学习
    java集合框架05——ArrayList和LinkedList的区别
  • 原文地址:https://www.cnblogs.com/a757956132/p/4108698.html
Copyright © 2011-2022 走看看