우선 HTTP는 상태가 없는(Stateless) 프로토콜이기 때문에 사용자가 웹 브라우저를 통해서 특정 웹 사이트에 접속하게 될 경우 어떤 사용자가 접속했는지에 대한 정보를 파악할 수 없다. 따라서, 쿠키 또는 세션을 사용하여 사용자를 구분하고 각 사용자에 맞는 정보를 제공한다.
쿠키란 클라이언트의 웹 브라우저에 저장되는 작은 데이터 조각으로 서버가 클라이언트의 요청을 식별하는데 사용함, 쿠키를 활용해서 사용자를 구분하는게 매우 유용하지만, 클라이언트가 수정, 해커가 탈취할 수도 있어서 보안에 취약하다. 따라서, 아이디 및 비밀번호 같은 민감한 정보들을 저장하는데 사용x, 아래와 같은 목적으로 사용함
- 세션 ID 관리, 서버에 저장해야 할 민감한 정보에 대한 식별자 ID
- 개인화, 사용자 선호 및 테마
- 트래킹, 사용자 행동 기록 및 분석
세션이란 브라우저가 서버에 연결되어 있는 동안 유지하는 데이터 집합이다. 사용자가 웹 사이트에 방문하여 서버에 요청을 보내게 되면, 사용자의 정보를 서버에 저장하고 그 정보를 식별할 수 있는 "세션 ID"를 Set-Cookie 헤더로 클라이언트에게 전송한다. 위에서 말했던 것처럼 클라이언트는 쿠키로 세션 ID를 관리하고 해당 서버에 요청할 때마다 Cookie 헤더에 세션 ID를 포함시켜 전송하기 때문에 서버는 클라이언트를 식별하여 그에 맞는 정보를 응답으로 줄 수 있게 된다. 아래와 같은 목적으로 사용함
- 민감한 정보 관리, 사용자의 비밀번호 및 개인정보
쿠키
- 클라이언트 쪽에 저장한다.(웹 브라우저)
- 브라우저가 꺼져도 삭제되지 않고 사용자가 삭제하거나 정해진 시간만큼 유지된다.
- 문자열만 저장할 수 있다.
- 클라이언트에서 보내기 때문에 속도가 빠르다.
- 민감한 데이터를 스니핑 당할수도 있기 때문에 보안에 취약하다.
세션
- 서버쪽에 저장한다.(서버의 메모리 혹은 데이터베이스)
- 브라우저가 꺼질 경우 삭제된다/
- 문자열 뿐 아니라 객체도 자장할 수 있다.
- 서버쪽에서 처리하기 때문에 속도가 비교적 느리다.
- 서버에서 민감한 데이터를 갖고 있기 때문에 비교적 보안이 좋다.