• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring MVC 마스터하기 쿠키, 세션 3
        2022년 05월 29일
        • starryeye
        • 작성자
        • 2022.05.29.:53
        반응형

        서블릿은 세션 기능을 개발자를 위하여 이미 제공하고 있다.

         

        HttpSession

        직전 포스팅의 SessionManager와 비슷한 기능을 담당하지만.. 실제 설계 내용은 많이 다른것 같다.

        HttpSession이 생성되면,

        클라이언트와 서버간의 Cookie가 생성되고

        key는 JSESSIONID

        value는 추정불가능한 임의의 값이다.

         

        <참고>

        SessionManager

        1개 WAS에 1개 세션(세션 저장소, SessionManager)

        여러 클라이언트가 동일한 세션을 바라본다.

        -> 쿠키에는 mySessionId:임의의 값으로 들어간다.

        -> SessionManager에는 임의의 값이랑 loginMember(member 객체) 가 매핑될 수 있는 메모리 테이블이 존재한다.

        -> HttpSession과 구조가 달라 용어 혼란이 올 수 있으니.. 생각하지말자..

         

         

        HttpSession

        1개 WAS에 여러 세션(세션 저장소, HttpSession)

        하나의 클라이언트가 하나의 세션(JSESSION:임의의값)을 바라본다. (쿠키)

        세션들은 Tomcat(서블릿 컨테이너)이 관리한다. Tomcat이 HttpSession들의 저장소를 가짐

        -> 클라이언트 - 서버간의 쿠키에는 JSESSION:임의의 값으로 들어간다.

        -> Tomcat에는 임의의 값이랑 HttpSession이 매핑될 수 있는 메모리 테이블(HttpSession들의 저장소)이 존재한다.

        -> HttpSession에는 여러 쌍의 key:value가 들어갈 수 있다.

        (아래 예제 에서는 SessionConst.LOGIN_MEMBER : loginMember(member 객체) 가 들어갔다.)

         

         

        HttpSession 객체를 사용하는 코드로 알아보자..

         

        로그인

        HttpServletRequest 의 getSession() 메서드는 파라미터로 boolean 값이 들어간다.

        true 일 경우... (default)

        -> Tomcat에 현재 요청 쿠키에 매핑되는 세션이 있으면 기존 세션 반환

        (위 예시에서는 로그인했지만 로그인페이지로 강제로 들어온게 아니라면.. 기존 세션이 무조건 없다.)

        -> Tomcat에 현재 요청 쿠키에 매핑되는 세션이 없으면 새로운 세션을 생성해서 반환한다.

         

        false 일 경우...

        -> Tomcat에 현재 요청 쿠키에 매핑되는 세션이 있으면 기존 세션 반환

        -> Tomcat에 현재 요청 쿠키에 매핑되는 세션이 없으면 null 값 리턴

         

        HttpSession 클래스의 setAttribute 메서드로 세션에(HttpSession) key, value 스타일로 저장할 수 있다.

         

        <참고>

        SessionConst 는 세션(HttpSession)에서 사용할 key값을 정의 해놓은 인터페이스이다.

        인터페이스 이므로 변수는 public static final 키워드가 적용된다.

        SessionConst.LOGIN_MEMBER 로 로그인용 세션 key를 얻을 수 있다.

         

        로그아웃

        현재 요청 쿠키의 JSESSION key의 Value(임의의 값)에 매핑되는 HttpSession을 찾아서 session 변수에 대입한다.

        (getSession 메서드의 파라미터로 false가 들어가서 찾지 못할 경우 생성하지는 않는다.)

        서버에서 유지되고 있는 세션이 찾아 지면, 해당 세션을 삭제 시킨다.

         

         

        세션 유무에 따른 홈 화면

        현재 요청 쿠키의 JSESSION key의 Value(임의의 값)에 매핑되는 HttpSession을 찾아서 session 변수에 대입한다.

        (getSession 메서드의 파라미터로 false가 들어가서 찾지 못할 경우 생성하지는 않는다.)

        서버에서 유지되고 있는 세션이 찾아 지면, 해당 세션(HttpSession)에서

        로그인 당시 저장해놓은 SessionConst.LOGIN_MEMBER 키 값으로 저장 해놓은 Value(Member) 객체를 받고

        로그인 되었을 경우의 홈화면으로 보낸다.

        반응형

        'Spring > MVC' 카테고리의 다른 글

        Spring MVC 마스터하기 필터 1  (0) 2022.06.03
        Spring MVC 마스터하기 쿠키, 세션 4  (0) 2022.06.03
        Spring MVC 마스터하기 쿠키, 세션 2  (0) 2022.05.29
        Spring MVC 마스터하기 쿠키, 세션 1  (0) 2022.05.29
        Spring MVC 마스터하기 Validation 10  (0) 2022.05.28
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바