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 |