日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何根据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解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。