티스토리 뷰

Java

HttpSession을 이용한 세션 저장법

zzangyeon 2021. 11. 5. 22:59

Http 프로토콜을 사용하는 웹 환경에서 상태를 유지하기 위한 방법은 여러가지가 있다.

대표적으로 쿠키,세션 방법을 많이 이용한다.

 

* 쿠키 - 상태유지를 위해 쿠키에 유저 정보를 담고 서버와 클라이언트간 정보를 주고받는 형태로 상태를 유지한다.

유저 정보 또는 중요한 정보를 쿠키에 담아 놓으면 보안상 해킹을 당할 가능성이 있다. 그래서 나온 방법이 세션이다.

 

* 세션 - 쿠키를 기반으로한 상태 유지 법이다.

쿠키와의 가장 큰 차이점은 중요한 정보를 서버에 저장한다는 것이다.

 

유추할 수 없는 고유의 세션번호를 가진 세션을 서버에 저장한다. 그리고 그 세션번호를 쿠키에 담아 클라이언트에게 전달하고, 클라이언트는 모든 요청에 세션번호가 담긴 쿠키를 함께 보낸다.

이러한 패러다임으로 동작한다.

 


 

 

HttpSession 객체

 

- HTTP 프로토콜은 비연결형(stateless) 프로토콜(연결 -> 요청 -> 응답 -> 종료)

- 연속적인 사용자 정보가 보관되지 않음

ex ) 로그인 상태, 장바구니

 

해결방안

- 별도의 수단을 통해 각각의 클라이언트를 구분

- 클라이언트 별로 해당 정보를 유지

- 어떻게 클라이언트를 구분할 것인가 ? -> 쿠키와 세션으로 해결 가능

 

 

쿠키 vs 세션

 

쿠키 :

- 브라우저를 통해 클라이언트에 저장되는 사용자 정보

- (name, value) 쌍으로 이루어진 정보

- 초기에 웹 서버에 의해 HTTP Header에 포함되어 클라이언트에게 전송

- 이후에 접속마다 클라이언트가 웹 서버에게 재전송

- 보안적 취약성으로 인해 중요 정보를 저장하지 않아야 함

 

세션 :

- 사용자 정보를 서버에 저장

- 클라이언트의 최초 접속 시 새로운 세션을 생성하고 세션 ID 전송

- 이후 접속마다 클라이언트가 세션 ID 재전송

- 서버는 세션 ID에 해당하는 세션 정보를 획득

- 세션 ID 전송 수단으로 쿠키를 사용할 수 있음

 

 

 

세션 관리

- 대부분의 세션 관련 작업은 container가 처리

- Servlet은 request로 부터 HttpSession 객체를 제공받음

ex ) HttpSession session = request.getSession();

 

생성된 세션이 없었던 경우

- Container에 의해 처리

- 새로운 세션 ID 생성

- 세션 ID를 클라이언트에게 보낼 준비

- 새로운 HttpSession 객체 생성 후 Servlet에 제공

 

기존 세션이 있는 경우

- Request에 포함된 세션 ID에 해당하는 HttpSession 객체를 찾아서 제공

 

 

HttpSession Interface

 

void invalidate() : 현재 세션 종료

 

 

long getLastAccessedTime() : 마지막으로 세션에 관련된 클라이언트가 요청을 보낸 시간 제공

 

void setMaxInactiveInterval(int) : 초단위로 최대 유휴기간 설정

 

int getMaxInactiveInterval() : 초단위로 설정된 최대 유휴기간 리턴

 

void setAttribute(String, Obect)

 

Object getAttribute(String)

 

 

세션 Lifecycle

 

- 생성 : 최초로 request.getSession()이 호출될 때 container가 생성

- 사용 : 클라이언트가 세션 ID를 이용해 접속, request.getSession()을 통해 사용중인 HttpSession 객체 획득 후 사용

- 종료 : invalidate()가 호출되거나, 세션이 타임아웃 되었을 때 container가 소멸

 

 



Reference

https://eehoeskrap.tistory.com/5 

 

'Java' 카테고리의 다른 글

Java - Reflection API (리플렉션) 이란?  (0) 2022.06.08
Java - Servlet(서블릿) 이란?  (0) 2022.06.08
서블릿 컨테이너란? 웹 애플리케이션 서버란?  (0) 2021.10.12
람다식1  (0) 2021.09.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함