package shopping;

 import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* 通过sessionId获取session
* HttpSessionListener:创建一个监听器监听session的创建和摧毁
*
* 如果用户重新新建了一个浏览器窗口,这样也可以解决了
*
*/
public class SiteSession implements HttpSessionListener {
//静态变量能够一直保存
/*
* String:sessionId
* session如果超时不能被垃圾回收器所回收,因为一直被静态变量所引用,将不会被回收
* 如果超时希望删除session的话,需要通过静态变量 Map<String,HttpSession> sessions来解决sessionDestroyed方法,以防止内存泄漏
*/
private static Map<String,HttpSession> sessions = new HashMap<String,HttpSession>(); public void sessionCreated(HttpSessionEvent sessionEvent) {
sessions.put(sessionEvent.getSession().getId(), sessionEvent.getSession());
} public void sessionDestroyed(HttpSessionEvent sessionEvent) {
sessions.remove(sessionEvent.getSession().getId());
} /**
* 只要知道用户的sessionId 就可通过该方法获取原先用户的session
* @param sessionID :session的id号
* @return
*/
public static HttpSession getSession(String sessionID){
return sessions.get(sessionID);
} }
  <!-- 监听器配置  监听session的创建和关闭-->
<listener>
<listener-class>shopping.SiteSession</listener-class>
</listener>
 如果acion采用:
request.getSession().getAttribute("cart",new Date());
的方式打开两个浏览器窗口的话,将不能获取同一个session对象 解决办法:
String sId = request.getParameter("sessionId");
HttpSession session = SitSessionListener.getSession(sId);
if(session == null ){
request.getSession().setAttribute("cart",new Date);
}else{
session().getAttribute("message",session.getAttribute("cart"));
}
就可以解决打开两个窗口但捕获的不是同一个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. Asp.Net IEnumerable,ICollection,IList,List区别

    做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: / ...

  2. Java [Leetcode 101]Symmetric Tree

    题目描述: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...

  3. Android下二维码的扫描

    Android平台下 二维码的扫描一般采用: Zxing:参考地址 Zxing功能比较强大,支持条形码和二维码的扫描,用的人也比较多,但是Zxing太大,一般开发简单的app,用起来比较麻烦. 所以网 ...

  4. 【Unity3D】枪战游戏—弹孔设置

    以子弹为原点,发射射线,如果射线检测到障碍物,则返回射线与障碍物的碰撞点 在该点处实例化出弹孔贴图 void Update () { transform.Translate (Vector3.forw ...

  5. 怎么制作生成苹果手机app应用的下载二维码图片

    原文网址:http://jingyan.baidu.com/article/8065f87ff654262331249886.html app store应用生成二维码操作步骤: 1.首先在MAC上的 ...

  6. css的框架——base.css

    一.常用的base.css文件(也是比较简略的,但按需增加) body,ul,li,ol,dl,dd,h1,h2,h3,h4,h5,h6,input,p{ margin:;} ul,ol { padd ...

  7. Java异常的分类

    1. 异常机制       异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器.       传 ...

  8. Android开源项目SlidingMenu深切解析

    demo:http://download.csdn.net/detail/javadxz/6954819 SlidingMenu的是一种斗劲新的设置界面或设备界面结果,在主界面左滑或者右滑呈现设置界面 ...

  9. Stamps and Envelope Size

    题意: 容量为s的信封,给n组邮票的面值,求哪一组能组成的连续的面值的最大值最大,若有多组答案,输出面值数量最小的一组,若数量相等,输出最大面值最小的一组,若最大面值相等,输出第二大面值最小的一组,依 ...

  10. C ~ 一个串口接收思路

    void uart_rx_isr(void) //接收中断函数 { uchar c; c=SBUF;//c等于接收的字节: switch (recv_state) { : if (c==0x02) / ...