안녕
1k
2016-08-23 13:48:33
2
1726

HttpSessionListener 로 세션id ,사용자 ID 저장하는 방법


HttpSessionListener   로 세션 타임아웃 시 로그아웃 처리된것처럼

로그아웃 시간을 DB 에 업데이트를 하려고하는데요

session id 와 로그인한 사용자 id 를 매칭하여 디비에 업데이트 하면 된다고 하던데

session id  생성시간과 로그인 시간이 동일 하지 않아 어떤 식으로

저장을해서 가져오는것인지 감이 잡히지 않아 질문드립니다.


컨트롤러에서 로그인시 세션아이디를 가져와서 사용자 id 를 저장한다고해도 

sessionDestroyed 에서

세션아이디와 사용자 id를 가져온다면


어디에 저장하여  가져와야할지... (세션은 삭제될테니 세션에 저장하는것은 아닌것같고 ...ㅡㅜ)


혹시 비슷한 문제로 고민해보신분이 있으신지 해서 질문 올립니다.


0
  • 답변 2

  • ghkdwls30
    2k
    2016-08-23 15:16:27

    제가 만든겁니다.




    package com.naim.web.websocket.service;


    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;


    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;


    import com.naim.web.framwork.util.ObjectUtil;


    public class HttpSessionEventPublisher implements HttpSessionListener {
     
       private static Map<String, HttpSession> sessions = new ConcurrentHashMap<String, HttpSession>();
     
       /**
        * 세션이 생성될 때 호출
        */
         @Override
         public void sessionCreated(HttpSessionEvent httpSessionEvent){
             HttpSession session = httpSessionEvent.getSession();
             sessions.put(session.getId(), session);
         }
     
         /**
          * 세션이 사라질 때 호출
          */
         @Override
         public void sessionDestroyed(HttpSessionEvent httpSessionEvent){
             sessions.remove(httpSessionEvent.getSession().getId());
         }
        
         /**
          * 세션이 유효한지 체크
          * @param sessionId
          * @return
          */
         public static boolean isVaildHttpSession( String sessionId){
          return ObjectUtil.isNotNull( sessions.get( sessionId)) ? true : false;
         }
    }


  • 안녕
    1k
    2016-08-25 13:32:16

    답변 감사드립니다.. 그런데 사용자 로그인할떄 사용자 id 와 session id 를 저장하고싶은건데

    해당소스로는 처리가 안될거같은데 아닌가요

  • 로그인을 하시면 답변 을 등록할 수 있습니다.