[Servlet] HTTP 세션 상태관리

2022. 7. 8. 10:52·과거의 이력/JAVA
목차
  1. 1. 개념
  2. * 세션(Session) 이란? 
  3. * HttpSession
  4.  
  5. * 세션 트래킹

 

 

웹개발시 사용자 세션정보를 확인할때 필수로 사용되는 HttpSession 객체와 세션에 대한 정리이다.

 


 

1. 개념

* 세션(Session) 이란? 

HTTP 기반으로 동작하는 클라이언트가 서버에 정보를 요청할 때 생성되는 '상태정보' 이다. HttpSession이라는 인터페이스 객체로 표현되며, HttpSession 객체는 HttpServletRequest의 getSession() 메소드를 이용하여 생성할 수 있다.

 

* HttpSession

HttpSession 객체가 생성될 때는 요청을 보내온 클라이언트의 정보, 요청 시간 정보 등을 조합한 세션 ID가 부여되며,

이 세션 ID는 클라이언트 측에 쿠키로 저장된다. 클라이언트마다 개별적으로 생성되어 유지되는 HttpSession 객체는 요청을 보내온 클라이언트와 서버간에 일정 시간(최대 시간은 브라우저가 살아 있는 동안) 동안 각 클라이언트의 상태정보를 서버에 저장하여 유지하고자 하는 목적으로 사용되는 객체이다.

 

HttpSession 객체는 서버에 생성되며,

클라이언트에는 세션 ID가 쿠키 기술로 저장되어

각 클라이언트에 대해 생성되는 HttpSession 객체를 클라이언트마다 개별적으로 유지 및 관리한다.

 

 

* 세션 트래킹

클라이언트마다 개별적으로  HttpSession가 생성된다고 위에 언급하였다. 이떄,

해당 상태정보를 일정 시간 동안 개별적으로 유지하여 사용하는 기술을 '세션 트래킹(session tracking)'이라고 한다.

 

세션 트래킹 기능의 구현 순서는 다음과 같다.

1) 클라이언트를 위한 세션을 준비한다. 이전에 이 클라이언트를 위해 생성된 세션이 이미 존재하면 존재하는 세션을 추출하고, 그렇지 않으면 새로 생성한다. 세션이 새로 생성될 때는 고유한 ID가 하나 부여되며, 이 ID는 클라이언트에 쿠키 기술로 저장된다.

2) 유지하고자 하는 정보를 저장할 목적의 객체를 생성하여 세션에 등록한다.

3) 클라이언트가 요청을 전달할 때마다 세션에 등록된 정보를 담고 있는 객체를 추출하여 원하는 기능에 사용한다.

4) 세션이 더 이상 필요없는 시점에서 세션을 삭제한다.

 

따라서 -클라이언트 개발시, 사용자 세션과 관련된 부분을 개발할때 서버의 세션 객체를 죽인 후 재실행 하지 않으면 기존 세션을 사용하는 등 원하는 결과를 얻지 못할 수 있다!!

 


 

* HttpSession 생성

HttpSession 객체를 사용하고자 할 때는 개발자가 수동으로 생성하는 것이 아니라, 메소드를 이용하여 생성하거나 기존의 HttpSession 객체의 주솟값을 추출하여 사용한다. HttpSession 객체를 얻으려면 HttpServletRequest 객체의 다음 메소드를 사용해야 한다.

 

  • HttpServletRequest의 getSession()
  • 클라이언트가 가지고 있는 세션 ID와 동일한 세션 객체를 찾아서 주솟값을 반환한다. 만일 세션이 존재하지 않으면 새로운 HttpSession 객체를 생성하여 반환합니다.

이때 getSession에 불리언 타입의 배개변수를 던질 수 있는데,

매개변수 값이 true이면 getSession() 메소드와 마찬가지로 새로운 HttpSession 객체를 생성하여 반환하고

false이면 새로운 HttpSession 객체를 생성하지 않고 null을 반환합니다.

 

 

 


 

* 예시

만약 웹개발시 사용자 세션정보가 null일 경우 예외처리를 해야한다면,

getSession에 다음과 같이 false를 매개변수로 하여 null 을 반환받을 수 있다.

 

HttpSession session = request.getSession(false)

if(session == null) {
	// 세션객체가 없을 경우
}

 

 

 

 

 

'과거의 이력 > JAVA' 카테고리의 다른 글

[JAVA] HashMap LinkedHashMap 차이점  (0) 2022.08.08
[error] 자바 Required String parameter is not present 에러 원인  (0) 2022.07.14
[JAVA] 변수 타입 확인하기  (0) 2022.07.12
Spring Boot에서 Vue 프로젝트를 띄우기 위한 구성  (0) 2022.06.08
[Java] HashMap 배열의 타입? (java.util.ArrayList cannot be cast to [Ljava.lang.String)  (0) 2022.03.19
  1. 1. 개념
  2. * 세션(Session) 이란? 
  3. * HttpSession
  4.  
  5. * 세션 트래킹
'과거의 이력/JAVA' 카테고리의 다른 글
  • [error] 자바 Required String parameter is not present 에러 원인
  • [JAVA] 변수 타입 확인하기
  • Spring Boot에서 Vue 프로젝트를 띄우기 위한 구성
  • [Java] HashMap 배열의 타입? (java.util.ArrayList cannot be cast to [Ljava.lang.String)
정많이 정만이
정많이 정만이
jeongmany
  • 정많이 정만이
    정많이 정만이
    정많이 정만이
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • 과거의 이력 (71)
        • CS (12)
        • 프론트엔드 (4)
        • javascript (21)
        • Vue.js (7)
        • bootstrap (1)
        • [그리드] ag-grid (3)
        • [그리드] vue-grid-layout (1)
        • HTML_CSS (5)
        • NPM (1)
        • [차트]highcharts (0)
        • JAVA (9)
        • 백엔드 (1)
        • 기본개념 (손필기) (5)
        • 프로그래머스 (1)
      • 알고리즘 (6)
      • 통계 (9)
        • 통계지식 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    HTML
    bootstrap
    js map
    코딩테스트
    vue
    js
    java
    알고리즘
    ES6
    자바스크립트
    객체
    버추얼박스
    vue.config.js
    우분투
    반복문
    JavaScript
    cs
    vue.js
    VirtualBox
    Webpack
    selectbox
    ubuntu설치
    ubuntu
    aggrid
    ag-grid
    CSS
    webpack.config.js
    공유메모리
    개발자
    vuejs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정많이 정만이
[Servlet] HTTP 세션 상태관리

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.