위와 같은 특징으로 인해 서버는 같은 사용자가 요청하더라도 새로운 사용자로 인식한다. 이러한 HTTP의 단점을 보완하기 위해서 쿠키와 세션이 존재한다.
key
: value
형태의 작은 데이터 파일
- 클라이언트가 페이지를 요청
- 서버에서 쿠키를 생성
- HTTP 헤더에 쿠키를 포함 시켜 응답
- 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
- 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
- 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
쇼핑몰에서 장바구니에 품목을 담은 뒤에 메인 페이지를 요청하면, 여전히 장바구니가 유지되는 것을 확인할 수 있다. 메인페이지를 요청하는 것은 단순히 메인 페이지를 랜더링 해달라는 요청인데 장바구니가 유지되는 이유는 쿠키를 주고 받기 때문이다.
장바구니 화면에서 개발자도구를 살펴보면 많은 쿠키들을 확인할 수 있는데 이 쿠키들은 서버에서 브라우저가 저장하라고 전달해준 것이다. (이것 또한 프로토콜이다.) 이 중 하나가 장바구니를 유지해주는 쿠키일 것이다.
장바구니 화면에서 쿠키를 삭제하면
장바구니가 비워지는 것을 볼 수 있다. 장바구니의 상태를 유지해주는 쿠키를 삭제했기 때문이다.
github에 로그인 한 뒤에 개발자 도구로 확인해 보면 user_session을 확인할 수 있다. 정확하진 않지만, session_id로 유추할 수 있다.
다른 페이지로 이동해서 해당 키가 그대로 유지된다.
이상태에서 user_session을 삭제하면
로그인이 상태가 해제되는 것을 확인할 수 있다.