通过 监听器获取sessionId
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的更多相关文章
- 使用session的监听器获取当前在线人数
1首先在web.xml中配置Session的监听器 2创建监听器并且继承HttpSessionListener 3.在jsp中导入监听器 4.获取当前在线人数 5.配置到公共网络(使用natapp的免 ...
- Hive-jdbc获取sessionId
在HiveStatement中有一个sessHandle: public class HiveStatement implements java.sql.Statement { ... private ...
- jsp获取SessionID值
<% HttpSession s = request.getSession(); s.setAttribute("name","test"); %> ...
- thymeleaf 获取sessionid
参考https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html ${#session.id}
- java根据sessionid获取session
import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpSession; /** * * Class ...
- 监听器和普通类获取springContext和context,从而获取springbean和application范围的对象
1.定义一个监听器[MyContextListener],此类里最主要获取springContext和context package my.request; import javax.servlet. ...
- shiro 获取请求头中的 sessionId
前言: 在前后端项目中, 前端有可能会要求, 后台返回一个 sessionId 给他, 然后他在请求后台接口时, 把这个sessionId 带给后台, 后台拿到这个sessionId , 就能识别, ...
- 关于selenium获取token sessionid
# 获取sessionid def get_sessionid(self): # 是要从localStorage中获取还是要从sessionStorage中获取,具体看目标系统存到哪个中 # wind ...
- 移动端获取短信验证码java实现——阿里云短信服务
需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...
随机推荐
- ASP.NET MVC ActionResult的实现
1.11种ActionResult 在System.Web.Mvc命名空间下: ActionResult是一个抽象类, 在Action中返回的都是其派生类.下面是我整理的ASP.NET MVC 1.0 ...
- 实现推送功能APP端需要完成的工作
推送功能简介 实现推送的流程如下: 从APP注册推送功能,到APNS服务器发送推送消息给设备,有五个步骤. 一旦推送注册完成,应用自身的服务器以provider的身份提供推送. APP端实现 在代码方 ...
- 解决Jsoup网页抓取过程中需要cookie的问题
最近在做城觅网的信息抓取,发现城觅网上海与北京的url是一样的.那怎样才确定信息的来源呢?折腾了半天,才发现城觅网是使用cookie的,如果你把网站的cookie禁用了,就无法在上海与北京之间切换了. ...
- CXF之八 RESTFul服务
JAX-RS概述 JAX-RS是Java提供用于开发RESTful Web服务基于注解(annotation)的API.JAX-RS旨在定义一个统一的规范,使得Java程序员可以使用一套固定的接口来开 ...
- 《C++ primer》--第9章
习题9.2 创建和初始化一个vector对象有4种方式,为每种方式提供一个例子. 解答: 分配指定数目的元素,并对这些元素进行值初始化: vector<int> ivec(10); ...
- Delphi 利用TComm组件 Spcomm 实现串行通信
Delphi 利用TComm组件 Spcomm 实现串行通信 摘要:利用Delphi开发工业控制系统软件成为越来越多的开发人员的选择,而串口通信是这个过程中必须解决的问题之一.本文在对几种常用串口通信 ...
- AWR
Automatic Workload Repository是10g引入的一个重要组件.在里面存贮着近期一段时间内,默认是7天,数据库活动状态的详细信息 手动得到一份AWR报告: SQL> exe ...
- 某酒店2000W数据
某酒店2000W数据 2000万开房信息 [某酒店2000w数据 ct2000(解压密码:sjisauisa是就数据8很舒适好sjjss).rar] 国内安全漏洞监测平台乌云(WooYun.org)近 ...
- 在Ubuntu6.06 在搭建SVN服务器及在windows建立svn+ssh客户端
部门现在使用的Linux系统是Ubuntu6.06,内核版本为2.6.15-57-386.由于系统比较老,所有用网上介绍的方法搭建SVN服务器经常出错,所以参考文章[1],将自己的搭建过程记录下. 1 ...
- hbase使用-java操作
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courie ...