세션 : 반영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화, 송수신 연결상태를 의미하는 보안적인 다이얼로그 및 시간대를 의미한다. (위키피디아 일부 발췌)
HTTP는 무상태성(stateless)이라는 특성을 가지고 있다. 만약 쿠키와 세션이 존재하지 않으면 서버는 클라이언트를 매번 확인해야 한다. 이 특성을 보완 하기 위해 쿠키와 세션을 사용한다.
세션은 쿠키를 기반으로 하고 있으나 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리 한다.
로그인 성공시 서버는 해당 유저가 인증에 성공 했다고 판단한다.
서버는 해당 유저에 대한 세션을 저장소(주로 인메모리 또는 세션 스토어)에 저장한다.
세션 성공을 증명할 수단으로 서버에서 클라이언트로 세션 아이디를 발급한다.
이때 웹 사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용하고, 쿠키에선는 서버에서 발급한 세션 아이디를 저정한다.
set-cookie로 클라이언트에게 쿠키 전송시 세션 아이디의 키값을 무효한 값으로 갱신시킨다.
세션 아이디가 쿠키에 저장되는 만큼 세션은 쿠키의 단점을 고스란히 가지고 있다. 쿠키는 오래 유지 될 수 있고 JS로 접근하여 악용할 수 있다.