-
Cookie란?
- 클라이언트 로컬에 저장되는 키와 값으로 구성된 데이터 파일
- 쿠키 구성 요소에는 이름, 값, 유효시간, 도메인, 경로 정보가 있음
Cookie 프로세스
- 클라이언트가 페이지를 요청
- 서버에서 쿠키 생성
- HTTP 헤더에 쿠키를 포함시켜 응답
- 브라우저가 종료되어도 쿠키 만료 기간이 지나지 않으면 클라이언트에서 보관
- 쿠키가 존재하면 요청을 할 경우 HTTP 헤더에 쿠키를 포함해서 요청
- 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 경우 쿠키를 업데이트해서 변경된 쿠키를 HTTP 헤더에 포함하여 응답
Session이란?
- 쿠키를 기반으로하고 사용자 정보를 서버측에서 관리
- 일정 시간동안 같은 브라우저로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지하는 기술
- 사용자 정보를 서버에 두기 때문에 쿠키보다 보안이 좋지만 사용자가 많아질수록 서버 메모리를 많이 차지
- 클라이언트가 request를 보내면 해당 서버의 엔진이 클라이언트에 유일한 Session ID를 부여
Session 프로세스
- 클라이언트가 서버로 HTTP요청을 시도
- 서버는 접근한 클라이언트의 request-header field인 cookie를 확인해 클라이언트가 해당 session-id를 보내왔는지 확인
- 만약 클라이언트로부터 발송된 session-id가 없다면 서버는 session-id를 생성해 클라이언트에게 response-header field인 set-cookie값으로 session-id를 응답함
- 서버로부터 응답된 session-id는 해당 서버와 클라이언트의 메모리에 저장됨(이때 사용되는 cookie타입은 세션 종료시 같이 소멸되는 memory cookie가 사용됨)
- 클라이언트 접속 종료시 서버에 저장된 session-id는 소멸
쿠키와 세션을 사용하는 이유
- HTTP 프로토콜이 Connectionless, Stateless한 특성을 갖고 있기 때문
- Connectionless : 클라이언트가 요청을 한 후 응답을 받으면 연결을 끊어 버리는 특징
- Stateless : 통신이 끝나면 상태 정보를 유지하지 않는 특징
쿠키와 세션의 차이
- 저장위치
- 보안
- 쿠키는 클라이언트에 저장되기 때문에 보안에 취약
- 세션은 쿠키를 이용해서 Session ID만 저장하고 Session ID로 사용자를 구분해서 서버에서 처리하기 때문에 보안성이 비교적 좋음
- 라이프 사이클
- 쿠키는 만료시간이 있지만 클라이언트 로컬에 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아있음
- 세션은 만료시간이 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제됨
- 속도
- 쿠키는 클라이언트에 저장되어서 세션에 비해 비교적 빠름
- 세션은 서버에 저장되어 있기 때문에 쿠키에 비해 비교적 느림