본문 바로가기

Spring

로그인 처리1 - 쿠키, 세션 : 로그인 처리하기 -세션 정보와 타임아웃 설정

인프런 영한님의 스프링 mvc2편을 보고 정리한 글입니다.

무엇을 배웠나요?

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