点个赞,看一看,好习惯!本文 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解决方案相关推荐

  1. Grails通过sessionId获取session对象

    Grails通过sessionId获取session对象 思路:自定义一个类用来监听session,所有session存入map中,sessionId作为读取的key 创建监听类 SessionTra ...

  2. java根据sessionid获取session

    java根据sessionid获取session import java.util.HashMap; import java.util.Map;import javax.servlet.http.Ht ...

  3. 根据sessionId获取Session对象

    Servlet2.1之后不支持SessionContext里面getSession(String id)方法. 但是,我们可以通过HttpSessionListener监听器和全局静态map自己实现一 ...

  4. 通过sessionid获取session php,php如何返回sessionID和如何通过sessionID获取相关的session...

    php如何返回sessionID和如何通过sessionID获取数据 回复内容: php如何返回sessionID和如何通过sessionID获取数据 说下 session 的基本知识 session ...

  5. Java通过sessionid获取session

    1,首先生成session,并获取其id. 2,将sessionid与session通过键值对的形式进行存储(静态全局变量). 3,需要使用的时候将session进行取出 代码: HttpSessio ...

  6. java springboot根据sessionId获取session(根据sessionId无法获取session)

    java已经不支持通过sessionId直接获取session 所以只能自己建立session监听类来存储和取session 监听类 import javax.servlet.annotation.W ...

  7. 如何根据sessionID获取session

    根据sessionID有一个比较简单的方法,使用session上下文即可 HttpSession sess = session.getSessionContext().getSession(sid) ...

  8. java 获取 sessionid_通过sessionid获取session方法

    使用HttpSessionListener来监听session的创建和销毁,首先创建HttpSessionListener的实现类 SessionListeners.java packagecom.t ...

  9. 阿里云视频上传视频获取进度条问题(使用session方案,获取进度一直为0的解决方案)补充:前后端分离项目中获取进度解决方案

    1.场景描述: 之前用阿里云上传视频,前端反应上传视频经常出现获取视频url失败问题.但是接口我测过很多遍都是没有问题的.后台这边提供了一个视频上传的接口返回一个videoId,还提供了一个根据vid ...

最新文章

  1. 深度学习的算法实践和演进
  2. 【转载】Java JVM 运行机制及基本原理
  3. centos7 升级 gdb
  4. Linux真随机数的生成
  5. Linux 系统工具
  6. 百度搜索结果 转换_如何让图片出现在百度搜索结果里出现?
  7. camunda 流程执行追踪_九思OA项目管理解决方案:规范企业项目流程,掌握项目进展...
  8. C++中各种智能指针的实现及弊端(三)
  9. Sublime配置与各种插件
  10. [css] Reset CSS和Normalize CSS的区别是什么?
  11. 8.22 NOIP模拟测试29(B) 爬山+学数数+七十和十七
  12. Linux入门(2)_给初学者的建议
  13. ubuntu下安装JDK以及配置
  14. Java计算的XML面试题
  15. XLM-RoBERTa: 一种多语言预训练模型
  16. 苹果Mac记事本中快速计算应用:Soulver
  17. excel公式和函数
  18. 【后端】--process information unavailable解决办法[详细版]
  19. Microsoft Word 教程:如何在 Word 中创建项目符号列表、显示字数统计?
  20. 中国医学计算机成级别像杂志,中国医学计算机成像杂志

热门文章

  1. shell 常用命令
  2. DRAM、SRAM、SDRAM、DDRSDRAM的区别
  3. Bluetooth profile: ATT/GATT(襄坤在线)
  4. 测验1: Python基本语法元素 (第1周)
  5. java商品展示页面代码_java学习(十四)实现商品的展示、curd以及分页展示
  6. scrapy 安装_安装scrapy时出错
  7. C++(六)——继承
  8. 【django】聚合函数和排序函数
  9. Shell之while循环
  10. 2022-01-07