如何根据sessionID获取session解决方案

如何根据sessionID获取session解决方案一 写在前面最近在做一个项目的时候 本来是想通过 session 来存一些数据的 但是 发现当两次访问的方法不同时 后台的 session 是不一样的 也就是说 sessionId 不一致 所以导致的问题就是 当我需要从 session 取值的时候 总是出现取不到值的情况 后面也想过用 redis 但是也被坑了 后来 想到就是通过和前端沟通 通过 sessionId 和前端进行交互 来保证每一次的 sessio

点个赞,看一看,好习惯!本文 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 
  
    sessionMap; private MySessionContext() { sessionMap = new HashMap 
   
     (); } 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监听器

 
   
   
     com.chinapost.manager.utils.SessionListener 
    
   

注意:这个SessionListener是监听器的路径

完事,大功告成,之后在代码中直接获取就OK了

 MySessionContext myc= MySessionContext.getInstance(); HttpSession sess = myc.getSession(sessionId); 

好了,这样就完美的解决了问题了

最后,再分享我历时三个月总结的 Java 面试 + Java 后端技术学习指南,这是本人这几年及春招的总结,已经拿到了大厂offer,整理成了一本电子书,拿去不谢,目录如下:

如何根据sessionID获取session解决方案

现在免费分享大家,在下面我的公众号 程序员的技术圈子 回复 面试 即可获取。

如何根据sessionID获取session解决方案

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

1、老铁们,关注我的原创微信公众号「程序员的技术圈子」,专注于Java、数据结构和算法、微服务、中间件等技术分享,保证你看完有所收获。

2、给俺点个赞呗,可以让更多的人看到这篇文章,顺便激励下我继续写作,嘻嘻。

3、另外,原创文章首发在我的个人博客:blog.ouyangsihai.cn,欢迎访问。

点赞是对我最大的鼓励
↓↓↓↓↓↓

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201891.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午8:22
下一篇 2026年3月20日 上午8:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号