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

文章介绍了在处理前后端session不一致问题时,从传统的解决方案到采用自定义sessionContext和实现HttpSessionListener接口的新方法。通过创建自己的session管理类存储和删除session,以及监听session的创建与销毁,确保能正确获取和管理session。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

当两次访问的方法不同时,后台的session是不一样的,也就是说sessionId,不一致,所以导致的问题就是:当我需要从session取值的时候,出现取不到值的情况.
通过sessionId和前端进行交互,来保证每一次的session是一致的

一、以前解决方法

HttpSession sess = session.getSessionContext().getSession(sid)  

二、新的解决方法

1、创建自己的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);
	}
}

2、建立session监听,要实现HttpSessionListener接口

public class SessionListener implements HttpSessionListener {

	private MySessionContext myc = MySessionContext.getInstance();  
	
    public SessionListener() {
    }

    public void sessionCreated(HttpSessionEvent httpSessionEvent)  { 
    	HttpSession session = httpSessionEvent.getSession();  
        myc.addSession(session);
    }

    public void sessionDestroyed(HttpSessionEvent httpSessionEvent)  { 
    	HttpSession session = httpSessionEvent.getSession();  
        myc.delSession(session);
    }
	
}

接下来就可以通过这种方式来取得

MySessionContext myc= MySessionContext.getInstance();  
HttpSession sess = myc.getSession(sessionId);  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值