通过 监听器获取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
时间: 2024-11-13 08:04:59

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

jmeter学习笔记-如何获取sessionId

网上很多答案的解决办法试用后,发现并不管用. 最终解决办法是:在线程组后面加入<HTPP Cookie 管理器>,里面不做任何处理. 然后接下来在页面中,Jmeter下面的http请求中不添加任何cookie相关的内容,特别是<HTTP URL 重写修饰符>.<HTTP Cookie 管理器>.<正则表达式提取器>.Jmeter会直接获取该项值.

thymeleaf 获取sessionid

参考https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html ${#session.id} 原文地址:https://www.cnblogs.com/white-knight/p/8991712.html

Hibernate监听器

Hibernate的事件监听机制 Hibernate中的事件监听机制可以对Session对象的动作进行监听,一旦发生了特殊的事件,Hibernate就会执行监听器中的事件处理方法 在某些功能的设计中,我们即可以使用Hibernate的拦截器实现,也可以使用Hibernate的事件监听来实现 Hibernate中事件与对应的监听器接口 org.hibernate.event. EventListeners 事件类型 监听器接口 auto-flush---- -------------AutoFlu

activiti监听器使用

分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业务非常的复杂,通常有如下一些场景: 1.activiti人员动态的分配. 2.当前任务节点完成的时候,指定需要指定下一个节点的处理人(比如,一个请假流程,a员工请假,需要指定下一步需要处理请假流程的领导.). 3.任务节点完成的时候,需要一些复杂业务,(比如当前节点完成的时候,需要调用我们的jms消

监听器----如何使用监听器记录注册用户的在线状态?

首先写一个登陆界面----index.jsp <body> <form action="${pageContext.request.contextPath }/loginServlet" method="post"> 用户名:<input name="uname"/><br/> 密码:<input name="pwd" type="password"/&

android获取高校教务系统的数据原理分析

获取原理 想要获取到高校教务系统的数据,原理只有一个: 获取到教务系统的登陆Cookie的信息. 下面我拿我大学的学校的教务系统来分析分析: 首先我们要准备一个抓包的工具,推荐:win下Fiddler ,Mac下Charles. 接下来我将使用Charles这款工具,Charcles的使用需要注意的是不要开其他代理服务.比如翻墙的代理. 登陆系统 下面进入我们学校的电费查询系统,网址为:http://jn.hhtc.edu.cn:8021/XSCK/: 进入系统,如图: 打开抓包工具,勾选Mac

移动端权限控制--设置每个登录用户的sessionId

前言: 在pc端,每个用户首次登录后,浏览器会返回一个sessionId,存放在浏览器的响应中. 当再次访问其他接口时,浏览器会自动将sessionId放在请求头中的Cookie中.后台会自动识别sessionId,判断是哪个用户发过来的请求. 但是在移动端,浏览器没有实现这个功能,所以我们需要自己手动设置请求的sessionId. 我们可以在登录接口的响应中获取sessionId,如下: //获取到sessionId String responseCooike = response.getFi

springboot整合rabbirmq中使用mandatory参数获取匹配失败的消息!

先说下这个参数的作用: /** * Mandatory为true时,消息通过交换器无法匹配到队列会返回给生产者 * 为false时,匹配不到会直接被丢弃 */在一些特定场景下还是有用处的!接下来说一下绑定队列与交换器,需要在配置类或者xml中提前配置好尤其是queue,如果同时写了消费者,必须先配置好bean,即mq中队列必须存在,不然会报错 //创建消息队列 @Bean public Queue testQueue(){ //boolean表示消息是否持久化 return new Queue(

基于HttpClient的新版正方教务系统模拟登录及信息获取API

简介 通过HttpClient获取网页数据源,通过Jsoup解析数据.先模拟登录,再获取信息.模拟浏览器正常操作,封装请求头信息获取SESSIONID.模拟登录成功后切勿断开会话,依赖登录请求得到的Cookie进行二次请求.请求信息时需打开谷歌浏览器或Fiddler抓包查看参数及请求头信息. Maven依赖 1 <dependency> 2 <groupId>com.baidu.aip</groupId> 3 <artifactId>java-sdk<