通过session的id号获取对应的session
说说为什么要用session!!!
每次访问端通过普通http协议访问tomcat时,访问端包括网页或Android app等,tomcat都会自动生成一个不同的session,而且session的id都不同,一般存活周期五个小时
web的便捷之处就是只要浏览器不关闭或者不注销session,session的id都是固定的,
可是Android的就是个奇葩,每次访问id都会变,可是为什么Android还要执意用session呢?
因为我当时想做一个验证功能,让验证码存在后端的某个地方,同时还可以自动销毁,方便获取
因为servlet的版本升级原因,直接通过session的id获取之前已经存在的session的这个方法已经被官方api抛弃了,所以,想要实现这个给功能,需要自己手动创造这么个方法!!!
话不多说,上代码
步骤1.
找个地方写两个Java的类文件
第一个类:
代码:
import javax.servlet.http.HttpSession;
import java.util.HashMap;
public class MySessionContext {
private static HashMap mymap = new HashMap();
public static synchronized void AddSession(HttpSession session) {
if (session != null) {
mymap.put(session.getId(), session);
}
}
public static synchronized void DelSession(HttpSession session) {
if (session != null) {
mymap.remove(session.getId());
}
}
public static synchronized HttpSession getSession(String session_id) {
if (session_id == null)
return null;
return (HttpSession) mymap.get(session_id);
}
}
第二个类:
代码:
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
MySessionContext.AddSession(httpSessionEvent.getSession());
}
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
HttpSession session = httpSessionEvent.getSession();
MySessionContext.DelSession(session);
}
}
步骤2:
写好后,去web.xml文件里写一个监听器,监听器的位置不要写错,中间白色的是写上面的第二个类的路径,我把它放在mySession的文件夹里,
所以才写mySession.MySessionListener
代码:
<listener>
<listener-class>mySession.MySessionListener</listener-class>
</listener>
好了,代码过程部分都好了,现在需要去调用了
现在假设你知道一个session 的id为 a,a是个String类型数据;
那么可通过下面的第三步获得session
步骤3:
HttpSession session = MySessionContext.getSession(a);
这个session就是你要根据id找的session了,如果你之前在session通过方法setAttribute(“key”,“value”)存进去了数据
那么你就可以直接用getAttribute("key")获取这个数据
这时你要注意了,getAttribute("key")获取的值是object类型的,如果你要转成String,
你只需要在获取的值后面加 .String()方法进行转换!!!!
本文来自博客园,作者:岑惜,转载请注明原文链接:https://www.cnblogs.com/c2g5201314/p/10526106.html
响应开源精神相互学习,内容良币驱除劣币
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!