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

通过 监听器获取sessionId的更多相关文章

  1. 使用session的监听器获取当前在线人数

    1首先在web.xml中配置Session的监听器 2创建监听器并且继承HttpSessionListener 3.在jsp中导入监听器 4.获取当前在线人数 5.配置到公共网络(使用natapp的免 ...

  2. Hive-jdbc获取sessionId

    在HiveStatement中有一个sessHandle: public class HiveStatement implements java.sql.Statement { ... private ...

  3. jsp获取SessionID值

    <% HttpSession s = request.getSession(); s.setAttribute("name","test"); %> ...

  4. thymeleaf 获取sessionid

    参考https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html ${#session.id}

  5. java根据sessionid获取session

    import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpSession; /** * * Class ...

  6. 监听器和普通类获取springContext和context,从而获取springbean和application范围的对象

    1.定义一个监听器[MyContextListener],此类里最主要获取springContext和context package my.request; import javax.servlet. ...

  7. shiro 获取请求头中的 sessionId

    前言: 在前后端项目中, 前端有可能会要求, 后台返回一个 sessionId 给他, 然后他在请求后台接口时, 把这个sessionId 带给后台, 后台拿到这个sessionId , 就能识别, ...

  8. 关于selenium获取token sessionid

    # 获取sessionid def get_sessionid(self): # 是要从localStorage中获取还是要从sessionStorage中获取,具体看目标系统存到哪个中 # wind ...

  9. 移动端获取短信验证码java实现——阿里云短信服务

    需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...

随机推荐

  1. jQuery Ajax通用js封装

    第一步:引入jQuery库 <script type="text/javascript" src="<%=path%>/resources/js/jqu ...

  2. 使用ffmpeg向crtmpserver发布rtsp流

    ffmpeg的调用命令如下: ffmpeg -re -i xxx.mp4  -vcodec copy -acodec copy -f rtsp rtsp://127.0.0.1/live/mystre ...

  3. 【周期串】NYOJ-1121 周期串

    [题目链接:NYOJ-1121] 例如:abcabcabc 该字符串的长度为9,那么周期串的长度len只可能为{1,3,9},否则就不可能构成周期串. 接下来,就是要在各周期间进行比较.描述不清... ...

  4. css的伪元素

    这里想将的是两个伪元素,一个是:first-line——用来向文本的首行添加特殊样式,并且不论该行出现多少单词:只能与块状元素关联. 如下属性可以应用于:first-line伪元素 font属性 co ...

  5. Android-关于android:scrollbarStyle属性

    1. activity_maim.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  6. Java 7爆最新漏洞,10年前的攻击手法仍有效

    英文原文:New Reflection API affected by a known 10+ years old attack 据 SECLISTS 透露,他们发现新的 Reflection API ...

  7. [Papers]NSE, $\p_3u$, Lebesgue space [Kukavica-Ziane, JMP, 2007]

    $$\bex \p_3\bbu\in L^p(0,T;L^q(\bbR^3)),\quad \frac{2}{p}+\frac{3}{q}=2,\quad \frac{9}{4}\leq q\leq ...

  8. 标准Web系统的架构分层[转]

    标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...

  9. Bug疑难杂症 - java.lang.NoSuchFieldError: udhLen

    通过友盟后台记录到一个诡异的错误: HUAWEI C8825D 4.0.4 百度.谷歌都未能找到一丝结果更别提解决方案. java.lang.NoSuchFieldError: udhLen at a ...

  10. NGUI学习笔记-Label

    属性说明 Overflow: ShrinkContent : 如果文本超出文本框宽度,会自动缩小文本size,使其显示完整 ClampContent : 文本大小固定,超出文本框的部分不会显示,也不会 ...