微信小程序 Session 失效
微信小程序,前端請求後端,中間多了個微信服務器,所以請求的流程就是 頁面--微信服務器--目標服務器 這就導致了一個問題 session 每次請求都是一個新的會話
解決辦法 :
項目搭建使用的是 maven + spring boot + spring data jpa
@WebListener public class MySessionListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { MySessionContext.addSession(httpSessionEvent.getSession()); } @Override public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { HttpSession session = httpSessionEvent.getSession(); MySessionContext.delSession(session); } }
public class MySessionContext { private static HashMap<String,Object> sessionIdMap = new HashMap<String,Object>(); public static synchronized void addSession(HttpSession session) { if (session != null) { sessionIdMap.put(session.getId(), session); } } public static synchronized void delSession(HttpSession session) { if (session != null) { sessionIdMap.remove(session.getId()); } } public static synchronized HttpSession getSession(String session_id) { if (sessionIdMap.containsKey(session_id)){ return (HttpSession) sessionIdMap.get(session_id); }else{ return null; } } }
在需要用到session的地方將session保存
//存sessionId final String sessionId = request.getSession().getId(); //存session MySessionContext.addSession(request.getSession());
將sessionId返回到前臺 在之後交互的時候 將sessionId發到後臺
//根據sessionId獲取session HttpSession session = MySessionContext.getSession(sessionId);
這就可以獲取到之前的session