인프런 영한님의 스프링 mvc2편을 보고 정리한 글입니다.
무엇을 배웠나요?
- 세션이 제공하는 정보를 확인할 수 있다.
- sessionId : 세션Id, JSESSIONID 의 값.
- maxInactiveInterval : 세션의 유효 시간
- creationTime : 세션 생성일시
- lastAccessedTime : 세션과 연결된 사용자가 최근에 서버에 접근한 시간
- 클라이언트에서 서버로 sessionId ( JSESSIONID )를 요청한 경우에 갱신된다.
- isNew : 새로 생성된 세션인지, 아니면 이미 과거에 만들어졌고, 클라이언트에서 서버로 sessionId ( JSESSIONID )를 요청해서 조회된 세션인지 여부
- 세션 타임아웃 설정
- 세션은 로그아웃을 직접 호출해서 session.invalidate()가 호출 되는 경우에 삭제된다.
- 그러나 Http가 비연결성이므로 서버 입장에서는 해당 사용자가 웹 브라우저를 종료한 것인지 아닌지를 인식할 수 없다.
- 따라서 서버에서 세션 데이터를 언제 삭제해야 하는지 판단하기가 어렵다.
- 만약 남아있는 세션을 무한정 보관하면 다음과 같은 문제가 발생할 수 있다.
- 세션과 관련된 쿠키를 탈취 당했을 경우 오랜 시간이 지나도 해당 쿠키로 악의적인 요청을 할 수 있다.
- 세션은 기본적으로 메모리에 생성된다. 메모리의 크기가 무한하지 않기 떄문에 꼭 필요한 경우만 생성해서 사용해야 한다.
- 만약 해당 세션관련하여 Http 요청이 있으면 타임 아웃시간으로 다시 초기화 된다.
- 세션에는 최소한의 데이터만 보관해야 한다. 너무 많은 양의 데이터를 세션에 보관하면 메모리 사용량이 급격하게 늘어나 장애가 발생한다.
- 세션의 시간을 적당히 가져가야 한다. 세션의 시간을 너무 길게 가져가면 메모리 사용이 계속 누적 될 수 있으므로 적당한 시간을선택하는것이 필요하다.
- 세션 타임아웃 설정은 아래와 같이 스프링 부트로 글로벌 설정이 가능하다.
session.setMaxInactiveInterval(1800); //1800초
'Spring' 카테고리의 다른 글
스프링 시큐리티 주요 아키텍처 이해 - 위임 필터 및 필터 빈 초기화 - DelegatingProxyChain, FilterChainProxy (0) | 2023.07.11 |
---|---|
QueryDsl fetchResult Deprecate (0) | 2023.07.07 |
로그인 처리1 - 쿠키, 세션 : 로그인 처리하기 - 서블릿 HTTP 세션2 (0) | 2022.09.12 |
로그인 처리1 - 쿠키, 세션 : 로그인 처리하기 - 서블릿 HTTP 세션1 (0) | 2022.09.12 |
로그인 처리1 - 쿠키, 세션 : 로그인 처리하기 - 세션 직접 만들기 (0) | 2022.09.12 |