
세션의 종료 시점
세션의 종료시점은 어떻게 될까? 한번 생성 되면 영원히 지속되는게 좋을까?

session.invalidate()를 호출하면 해당 세션은 삭제 된다.
하지만 항상 모든 사용자가 로그아웃을 해주지 않는다. 그저 브라우저를 종료해버린다.
그러면 세션은 삭제가 되지 않고 몇일이 지난 뒤 사용자가 들어와도 로그인이 가능하다.
이때 문제가 발생한다.
세션 영구적 보관 문제점
1. 해킹 문제
세션과 관련된 쿠키( JSESSIONID )를 탈취 당했을 경우 오랜 시간이 지나도 해당 쿠키로 악의적인 요청을 할 수 있다.
2. 메모리 문제
세션은 기본적으로 메모리에 생성된다. 메모리의 크기가 무한하지 않기 때문에 꼭 필요한 경우만 생성해서 사용해야 한다.
10만명의 사용자가 로그인하면 10만개의 세션이 생성되는 것이다.
이러한 문제때문에 세션에 타임아웃을 걸어야한다.
세션 타임아웃
방법1. 세션 생성 시점에서의 30분
간단하게 생각하면 해당 방법으로 하면 될거 같지만 이렇게 설정을 하면 사용자는 로그인을 하고 웹페이지를 사용하다가 30분이 지나면
다시 로그인을 해줘야한다. 아주 번거러워진다.
방법2. 사용자가 서버에 최근에 요청하 시간 시점에서 30분
이 방법을 사용하면 웹페이지를 이용하는 동안 30분마다 로그인을 해줘야하는 번거러움이 사라진다.
사용자가 서비스를 이용하고 있다면 세션의 유효기간은 계속적으로 증가한다.
세션 타임아웃 설정 방법
application.properties에서 모든 세션의 타임아웃을 설정해줄수 있다.
기본은 1800초(30분)이다.

특정 세션 단위로도 타임아웃을 설정 할 수있다.
이렇게 해주면 자동으로 WAS가 내부에서 해당 세션을 지속적으로 초기화 삭제를 해준다.

주의점
실무에서는 세션은 최소한의 데이터만 보관 해줘야한다.
사용자가 많다면 메모리 사용량이 급증해서 장애로 이어질 수 있다. 적당한 시간을 선택하는것은 중요하다!
'Spring > Login' 카테고리의 다른 글
| 서블릿 필터(Servlet Filter) (0) | 2023.05.30 |
|---|---|
| 세션(Session) - @SessionAttribute 사용 (0) | 2023.05.16 |
| 세션(Session) - 서블릿이 제공하는 세션 사용 (0) | 2023.05.16 |
| 세션(Session) - 세션 직접 구현하기 (0) | 2023.05.15 |
| 세션(Session) - 개념 (0) | 2023.05.15 |