본문 바로가기
Spring/Spring MVC

HttpSession

by doriver 2024. 5. 28.

Cookie메커니즘

HTTP헤더의 필드들 : Set-Cookie , Cookie

브라우저는 ' Set-Cookie: ~ ' 를 기반으로 쿠키저장소( Application - Storage - Cookies )에 쿠키를 만들거나 삭제함

쿠키저장소에 있는 쿠키를 Request Headers에 ' Cookie : ~ ' 이런식으로 넣어줌

( 모든 요청에 쿠키정보 자동 포함 )

 

요청을 처리하는 도중 새로운 HttpSession이 생기면, 자동으로 응답헤더에 Set-Cookie : JSESSEIONID = 세션ID 가 추가되어 Cookie를 이용하게 된다.

 

jakarta.servlet.http.HttpSession

 

@Controller
public class ~ {

	@GetMapping(~)
    public ~ (HttpServletRequest request) {
    	HttpSession session = request.getSession();
    }
}

 

세션 식별자

세션은 고유한 세션 ID를 통해 식별됨, 이 ID는 쿠키를 통해 클라이언트에 저장됨

세션 데이터 저장

세션객체에 다양한 타입의 데이터를 저장할 수 있으며, 이는 서버 측에서 관리됨

 

HttpSession이 제공하는 정보들

id 세션Id, JSESSIONID 의 값이다. 
attributes  setAttribute로 저장한 값들( key, value쌍 )
maxInactiveInterval  세션의 유효 시간, 예) 1800초, (30분)
creationTime 세션 생성일시
lastAccessedTime 세션과 연결된 사용자가 최근에 세션에 접근한 시간, 클라이언트에서 서버로 sessionId( JSESSIONID )를 요청한 경우에 갱신된다.
isNew  새로 생성된 세션인지, 아니면 이미 과거에 만들어져서 클라이언트에서 서버로 sessionId( JSESSIONID )를 요청해서 조회된 세션인지 여부

 

HttpSession의 종료시점

세션 생성 시점이 아니라 사용자가 서버에 최근에 요청한 시간을 기준으로 maxInactiveInterval( 세션의 유효 시간 )  만큼 유지됨

( 사용자가 서비스를 사용하고 있으면, 세션의 생존 시간이 계속 maxInactiveInterval 만큼 유지됨 )

 

세션의 타임아웃 시간은 해당 세션과 관련된 JSESSIONID 를 전달하는 HTTP 요청이 있으면 현재 시간으로 다시 초기화 된다. 

lastAccessedTime(최근 세션 접근 시간) 이후로 timeout 시간이 지나면, WAS가 내부에서 해당 세션을 제거한다.

 

세션사용 주의점

* 세션에는 최소한의 데이터만 보관해야 함

( 보관한 데이터 용량) * (사용자 수) 로 세션의 메모리 사용량이 급격하게 늘어나서 장애로 이어질 수 있다.

* 세션의 시간을 너무 길게 가져가면 메모리 사용이 계속 누적 될 수있으므로 적당한 시간을 선택하는 것이 필요

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

DispatcherServlet 초기화 까지  (0) 2024.08.25
서블릿Filter , 스프링HandlerInterceptor  (0) 2024.06.03
Cookie 확인( 생성및 조회, 삭제 )  (0) 2024.05.27
Spring MVC  (0) 2024.05.08
필터(Filter)와 인터셉터(Interceptor)  (0) 2022.12.07