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
  • 相关阅读:
    采用NAND Flash启动时出现Kernel panic not syncing: No init found错误
    ubuntu 11.10 安装小企鹅fcitx输入法
    UBoot中设定的bootdelay参数不起作用
    python 数据类型
    python运算符
    python符号//、%和/运算
    pytho 基本数据类型
    Python 开篇
    mmsplayer v2 java 之(mmsPlayer 播放类)
    mmsplayer v2 java 之(mmsTrack 音频类)
  • 原文地址:https://www.cnblogs.com/a757956132/p/4108698.html
Copyright © 2011-2022 走看看