쿠키와 세션이 필요한 이유를 알아보기 위해 HTTP를 먼저 보자.
HTTP는 서버와 클라이언트 사이에서 요청(Request) / 응답(Response)이 이루어지는 프로토콜이다.
요청을 응답하고 접속을 끊기 때문에 클라이언트의 상태정보를 알 수 없다.
이를 Stateless
라고 한다.
서버
가 일방적으로 사용자의 웹 브라우저에 전송하는 작은 데이터 조각.
서버가 HTTP 응답 헤더(header)의 Set-Cookie
에 내용을 넣어 전달하면, 브라우저는 이 내용을 자체적으로 저장한다.
이게 바로 쿠키다 !
쿠키는 Key-Value
형식의 문자열이다.
브라우저는 사용자가 쿠키를 생성하도록 한 동일 서버(사이트)에 접속할 때마다 쿠키의 내용을 Cookie
요청 헤더에 넣어서 함께 전달한다.
쿠키의 유효기간은 서버에서 설정해 보낼 수 있다.
유효기간이 지나면 쿠키는 자동적으로 소멸된다.
만약 유효기간을 설정하지 않는다면 브라우저를 종료하는 순간 사라진다.
쿠키는 클라이언트 식별과 같은 인증에 가장 많이 쓰인다.
set-cookie: user=chayezo
cookie: user=chayezo
를 자동으로 요청 헤더에 넣어서 전송.쿠키의 단점을 보완하고자 세션(Session)을 사용한다.
쿠키를 통해 클라이언트 로그인 상태를 유지시킬 수 있지만, 가장 큰 단점은 쿠키가 유출 및 조작 당할 위험이 있어 보안에 취약하다는 점이다.
개인정보를 HTTP로 주고 받는 것은 위험하다.
세션은 비밀번호 등 클라이언트의 인증 정보를 쿠키가 아닌 서버 측에 저장하고 관리한다.
브라우저를 통해 서버에 접속한 이후로 종료할 때까지 유지된다.
브라우저가 종료되면 만료시간에 상관없이 사라진다.
sessionid
라는 이름으로 저장.set-cookie: sessionid=a1s2djf
를 추가하여 응답.sessionid=a1s2djf
쿠키를 자동으로 HTTP 헤더에 넣어서 전송.sessionid
값을 저장된 세션 저장소에서 확인하고 응답.세션도 쿠키를 사용하여 값을 주고 받으며, 클라이언트의 상태 정보를 유지한다.
상태 정보를 유지하는 수단은 쿠키 !