본문 바로가기
Java/Servlet & JSP

JSP) 기본적인 session과 cookie의 흐름, session의 유효기간

by 박채니 2022. 6. 22.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


기본적인 session과 cookie의 흐름

http 요청을 보내는 client는 기본적으로 브라우저입니다.

서버는 client가 최초 접속했을 때 해당 client에 대한 session 객체를 생성합니다. (독립적)

 

그렇다면 client1이 다른 요청을 했을 때, 해당 요청이 client1에서 보낸 요청인 지 어떻게 알 수 있을까요?

- server는 session에 ID를 발급해줍니다. (쉽게 123, 456, 789로 정의)

- 그 후 session이 응답할 때 브라우저에게 session ID를 같이 보내줍니다. (set-cookie)

- 브라우저는 session ID를 받아 cookie를 이용하여 브라우저에 저장합니다.

- cookie는 다음에 server에 요청을 보낼 때 저장해둔 session ID를 server에게 함께 전송합니다.

그럼 server는 cookie가 보낸 session ID 값을 보고 해당 session에 대한 접근을 허용해줍니다.

 

local Storage와 비슷해보이지만 cookie는 브라우저에 사용자 정보를 저장하는 것 뿐만 아니라 서버에 전달까지 수행!

 

그렇다면 client1이 로그인을 해놓고 밥을 먹으러 갔다고 가정 → session이 만료되었을 때 어떻게 될까요?

- client가 server에 요청을 보낼 때 저장해둔 '123'을 server에 전송하였지만, server측에서 해당 session은 만료 되어 사라졌기 때문에 확인할 수 없습니다.

- 따라서 server측은 '123' session이 없다고 판단하여 새로운 session객체를 생성, session ID를 발급하여 다시 브라우저에게 전달해줍니다.


개발도구에서 확인해보기

 

최초 접속 시 생성된 session 객체에 대한 ID

애플리케이션 탭

 

로그인 후 로그아웃 처리

애플리케이션 탭

새로운 session ID를 다시 발급 받은 것을 확인할 수 있습니다.

 

네트워크 탭의 mvc2 헤더

요청 헤더에 Cookie는 이미 삭제된 이전의 ID 값 (AA893)을 서버에 전달한 것을 확인할 수 있습니다.

하지만 해당 ID값은 이미 삭제 되어 존재하지 않으므로 서버에서 응답 시 새롭게 생성된 ID 값을 브라우저에게 Set-Cookie로 전달해주는 것을 확인할 수 있습니다.

 

새로고침

서버가 응답해줄 때 준 ID(Set-Cookie)를 받아 다시 Cookie에 저장했으므로 Cookie에는 새로 발급 받았던 ID(D0F21)이 존재하는 것을 확인할 수 있습니다.


Session의 유효기간

- 기본적으로 30분으로 세팅 되어 있음

(localhost가 아닌 127.0.0.1로 접속!)

 

src/main/webapp/WEB-INF/web.xml에서 유효기간 세팅 가능

 

세션 만료를 1분 뒤로 설정

  <session-config>
  	<session-timeout>1</session-timeout>
  </session-config>

 

로그인 후 1분 뒤 session 만료되는 거 확인해보기

1분 동안 더이상 어떠한 요청을 주지 않아보았습니다.

그렇다면 1분 뒤에 session이 만료되어 해당 ID값이 사라지게 되는데요,

 

1분 뒤 새로고침

새로고침을 하니 로그인이 풀려버리고 새로운 session ID가 발급 된 것을 확인할 수 있습니다.