通过 监听器获取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.秘钥.签名.短信 ...
随机推荐
- highcharts 设置标题不显示
设置标题不显示:title:false 用法: title: { text: false },
- js 时间转成时间戳对比;My97DatePicker日历控件时间格式;Date.parse Firefox火狐浏览器返回Nan的解决办法
有个情况,我在显示时间的时候是需要显示为 2013年8月15日 14时28分15秒 但是假如我用js去获取到这个时间,并且想进行时间对比的时候,这个时间2013年8月15日 14时28分15秒根本就 ...
- Hadoop configration类分析
configration这个类是分析hadoop源代码一个很好地入口. 先从需求说起.对于一个大型的文件系统,基于配置文件可以增强灵活性.congfigration类就是为了管理配置文件的. 配置文件 ...
- linux + ffmpeg + eclipse 调试
使用linux + ffmpeg + eclipse调试步骤OS : ubuntu 12.04Eclipse : 3.7.2 为Eclipse安装cdt插件,使其支持c/c++ 导入ffmpeg项目 ...
- 数据库语言(一):SQL语法实例整理
数据库系统以一些语句作为输入,并返回一些输出,例如sql查询总是返回一张表,我们定义:具有相同格式的记录的集合是一张表. 考虑大学数据库系统: SQL中的数据类型: char(n) 字符串长度为n ...
- ubuntun安装ssh,并远程链接服务器操作
SSH是一种以安全.加密方式连接远程主机或服务器的方法.SSH服务器接受从有SSH的客户机的连接,允许操作者象在本地一样地登录系统.你可以用SSH从远程运行shell和X程序. (1)安装SSH服务器 ...
- Asp.net 将DataTable 或者DataSet 转换为Json 格式
Web 开发中,将从数据库中取到的数据直接转换为 Json 格式的数据,在前台通过Ajax 无刷新显示在界面上,下面提供将DataTable 或者DataSet 转换为Json 的方法 /// < ...
- HDU 5749 Colmerauer 单调队列+暴力贡献
BestCoder Round #84 1003 分析:(先奉上zimpha巨官方题解) 感悟:看到题解单调队列,秒懂如何处理每个点的范围,但是题解的一句算贡献让我纠结半天 已知一个点的up,do ...
- sql基本语句
---恢复内容开始--- 查询有几个不同的职位名称: select distinct name from a: group by: 现在有两个表product和sales,字段分别如下: TABLES ...
- <转>python version 2.7 required,which was not found in the registry
安装PIL-1.1.7.win32-py2.7的时候,不能再注册表中识别出来python2.7 方法:新建一个register.py 文件,把一下代码贴进去,保存 # # script to regi ...