다잘하고싶어

[Spring] 로그인구현7_세션 정보와 타임아웃 설정 본문

이론학습/SRPING

[Spring] 로그인구현7_세션 정보와 타임아웃 설정

챙영잉 2022. 10. 8. 12:34

 

 

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

 

세션 타임아웃 설정

세션은 사용자가 로그아웃을 직접 호출해서 'session.invalidate()'가 호출되는 경우에 삭제되는데, 대부분의 사용자는 로그아웃을 선택하지 않고 그냥 웹 브라우저를 삭제한다.

그러나 HTTP는 비연결성이므로 서버 입장에서는 사용자가 웹브라우저를 종료했는지를 알 수 없다.

(=서버는 세션 데이터를 언제 삭제해야할 지 알 수 없다)

 

세션을 무한정 보관하면

1. 세션과 관련된 쿠키를 탈취당했을 경우 오랜시간이 지나도 해당 쿠키로 악의적 요청할 수 있다.

2. 메모리 자리를 계속 차지한다.

라는 문제점이 있다.

 

세션을 세션 생성 시점으로부터 임의로 30분이 지나면 종료되도록 설정하면? 

30분마다 계속 로그인해야하는 문제점이 발생한다

 

따라서, 사용자의 최근 요청 시간을 기준으로 30분을 유지하도록 하면 된다.

 

test 해보자

server.servlet.session.timeout=60

임시로 60초로 설정하고,

 마지막 접근 시간으로부터 60초 지난 뒤에 새로고침을 해보면 

자동 로그아웃된다!

 

 

 

*실무에서 주의*

1. 세션에는 최소한의 데이터만 보관해야 한다. 보관한 데이터 용량 * 사용자 수로 세션의 메모리 사용량이 급격하게 늘어나서 장애로 이어질 수 있기 때문.

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

 


 

Reference : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com

강의 듣고 내용 정리중