주난v 개발 성장기

세션 관리(Head First Servlet & JSP) 본문

개발 성장기/Servlet

세션 관리(Head First Servlet & JSP)

주난v 2019. 11. 16. 19:54

등장 배경

웹 서버는 몇번을 요청을 보냈는지, 응답을 보냈는지 기억을 하지 못한다.
근데, 때로는 이를 기억해야할 필요가 있다.(결제, 장바구니)

컨테이너는 클라이언트를 어떻게 구분하나?

HTTP 프로토콜은 무상태 연결
브라우저 - 서버에 연결 - 요청 전달 - 응답 - 연결 해제
이러한 요청이 유지되는 것이 아니기 때문에 컨테이너는 새로운 클라이언트로부터 요청이 들어왔다고 인식한다.

유일한 세션ID가 필요하다.

클라이언트가 최초 요청을 보낼 때, 컨테이너는 클라이언트의 유일한 세션 ID를 생성한다.
그리고 이 값을 response에 전달한다.
다음 요청부터는 이 세션 ID와 함께 요청을 한다.
==> 이를 처리하는 일반적인 방법은 쿠키

클라이언트가 쿠키 사용을 막는다면?

백업으로 URL을 재작성한다, ;jsessionid=

세션 제거하기

다른 사이트로 가버리거나, 브라우저가 죽거나…
불필요한 세션이 필요 이상으로 서버에 남아있으면 별로…
HTTP 프로토콜은 클라이언트가 사라진건지 아닌지 알 수가없다.

  • 타임아웃
  • 특정 세션 타임아웃
  • invalidate()

세션 이동

ServletContext : VM당 하나
ServletConfig : VM당, 서블릿당 하나
HttpSession : 웹 어플리케이션당 하나(분산 처리와 상관없음)

컨테이너는 요청이 들어오면, 접수하고 세션 ID를 확인.
다른 서버에 있는 지 체크 후 기존 서버는 invalidate()하고 현재로 활성화 시킨다.