如何根据sessionID获取session解决方案
点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了3个月总结的一线大厂Java面试总结,本人已拿腾讯等大厂offer。
另外,原创文章首发在我的个人博客:blog.ouyangsihai.cn,欢迎访问。
一、写在前面
最近在做一个项目的时候,本来是想通过session来存一些数据的,但是,发现当两次访问的方法不同时,后台的session是不一样的,也就是说sessionId
,不一致,所以导致的问题就是:当我需要从session取值的时候,总是出现取不到值的情况,后面也想过用redis,但是也被坑了。
后来,想到就是通过和前端沟通,通过sessionId
和前端进行交互,来保证每一次的session是一致的,所以就想到了下面的方法。
二、以前解决方法
根据sessionID有一个比较简单的方法,使用session上下文即可
HttpSession sess = session.getSessionContext().getSession(sid)
不过很可惜,java之后处于安全性考虑,不建议使用这个方法,虽然我不知道为什么对安全性会有影响,但是既然java不建议用了。下面来分享一个方法,使用session监听器配合一个静态的hashmap即可实现。
三、新的解决方法
首先,创建自己的sessionContext
public class MySessionContext { private static MySessionContext instance; private HashMap<String,HttpSession> sessionMap; private MySessionContext() { sessionMap = new HashMap<String,HttpSession>(); } public static MySessionContext getInstance() { if (instance == null) { instance = new MySessionContext(); } return instance; } public synchronized void addSession(HttpSession session) { if (session != null) { sessionMap.put(session.getId(), session); } } public synchronized void delSession(HttpSession session) { if (session != null) { sessionMap.remove(session.getId()); } } public synchronized HttpSession getSession(String sessionID) { if (sessionID == null) { return null; } return sessionMap.get(sessionID); } }
然后建立session监听,要实现HttpSessionListener接口
public class SessionListener implements HttpSessionListener { private MySessionContext myc = MySessionContext.getInstance(); public void sessionCreated(HttpSessionEvent httpSessionEvent) { HttpSession session = httpSessionEvent.getSession(); myc.addSession(session); } public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { HttpSession session = httpSessionEvent.getSession(); myc.delSession(session); } }
接着,在web.xml中配置session监听器
<listener> <listener-class>com.chinapost.manager.utils.SessionListener</listener-class> </listener>
注意:这个SessionListener是监听器的路径
完事,大功告成,之后在代码中直接获取就OK了
MySessionContext myc= MySessionContext.getInstance(); HttpSession sess = myc.getSession(sessionId);
好了,这样就完美的解决了问题了
最后,再分享我历时三个月总结的 Java 面试 + Java 后端技术学习指南,这是本人这几年及春招的总结,已经拿到了大厂offer,整理成了一本电子书,拿去不谢,目录如下:
现在免费分享大家,在下面我的公众号 程序员的技术圈子 回复 面试 即可获取。
有收获?希望老铁们来个三连击,给更多的人看到这篇文章
1、老铁们,关注我的原创微信公众号「程序员的技术圈子」,专注于Java、数据结构和算法、微服务、中间件等技术分享,保证你看完有所收获。
2、给俺点个赞呗,可以让更多的人看到这篇文章,顺便激励下我继续写作,嘻嘻。
3、另外,原创文章首发在我的个人博客:blog.ouyangsihai.cn,欢迎访问。
点赞是对我最大的鼓励
↓↓↓↓↓↓
如何根据sessionID获取session解决方案相关推荐
- Grails通过sessionId获取session对象
Grails通过sessionId获取session对象 思路:自定义一个类用来监听session,所有session存入map中,sessionId作为读取的key 创建监听类 SessionTra ...
- java根据sessionid获取session
java根据sessionid获取session import java.util.HashMap; import java.util.Map;import javax.servlet.http.Ht ...
- 根据sessionId获取Session对象
Servlet2.1之后不支持SessionContext里面getSession(String id)方法. 但是,我们可以通过HttpSessionListener监听器和全局静态map自己实现一 ...
- 通过sessionid获取session php,php如何返回sessionID和如何通过sessionID获取相关的session...
php如何返回sessionID和如何通过sessionID获取数据 回复内容: php如何返回sessionID和如何通过sessionID获取数据 说下 session 的基本知识 session ...
- Java通过sessionid获取session
1,首先生成session,并获取其id. 2,将sessionid与session通过键值对的形式进行存储(静态全局变量). 3,需要使用的时候将session进行取出 代码: HttpSessio ...
- java springboot根据sessionId获取session(根据sessionId无法获取session)
java已经不支持通过sessionId直接获取session 所以只能自己建立session监听类来存储和取session 监听类 import javax.servlet.annotation.W ...
- 如何根据sessionID获取session
根据sessionID有一个比较简单的方法,使用session上下文即可 HttpSession sess = session.getSessionContext().getSession(sid) ...
- java 获取 sessionid_通过sessionid获取session方法
使用HttpSessionListener来监听session的创建和销毁,首先创建HttpSessionListener的实现类 SessionListeners.java packagecom.t ...
- 阿里云视频上传视频获取进度条问题(使用session方案,获取进度一直为0的解决方案)补充:前后端分离项目中获取进度解决方案
1.场景描述: 之前用阿里云上传视频,前端反应上传视频经常出现获取视频url失败问题.但是接口我测过很多遍都是没有问题的.后台这边提供了一个视频上传的接口返回一个videoId,还提供了一个根据vid ...
最新文章
- 深度学习的算法实践和演进
- 【转载】Java JVM 运行机制及基本原理
- centos7 升级 gdb
- Linux真随机数的生成
- Linux 系统工具
- 百度搜索结果 转换_如何让图片出现在百度搜索结果里出现?
- camunda 流程执行追踪_九思OA项目管理解决方案:规范企业项目流程,掌握项目进展...
- C++中各种智能指针的实现及弊端(三)
- Sublime配置与各种插件
- [css] Reset CSS和Normalize CSS的区别是什么?
- 8.22 NOIP模拟测试29(B) 爬山+学数数+七十和十七
- Linux入门(2)_给初学者的建议
- ubuntu下安装JDK以及配置
- Java计算的XML面试题
- XLM-RoBERTa: 一种多语言预训练模型
- 苹果Mac记事本中快速计算应用:Soulver
- excel公式和函数
- 【后端】--process information unavailable解决办法[详细版]
- Microsoft Word 教程:如何在 Word 中创建项目符号列表、显示字数统计?
- 中国医学计算机成级别像杂志,中国医学计算机成像杂志