쿠키와 세션의 정의
사용자(클라이언트)의 인증 정보를 포함하고 있는 Cookie와 Session
쿠키의 탄생
사용자(클라이언트)의 IP 주소와 User-Agent는 매번 변경되며 고유하지 않은 정보로,
HTTP 프로토콜의 Connectionless와 Stateless 특징 때문에 웹 서버는 사용자(클라이언트)를 기억할 수 없다.
HTTP 프로토콜 | |
Connectionless | 하나의 요청에 하나의 응답을 한 후에 연결을 종료한다. |
Stateless | 통신이 끝난 후 상태 정보를 저장하지 않는다. => 서버가 많은 사용자(클라이언트) 연결을 추적할 필요가 없기 때문에(HTTP 확장 가능) |
=> 이런 특성들 인해 HTTP상에서 상태 유지를 위해서 쿠키가 탄생했다.
=> 쿠키는 사용자(클라이언트)의 정보와 상태를 담고 있다.
쿠키의 통신
1. 쿠기가 없을 때
- 로그인

사용자(클라이언트) ----------------로그인 정보-------------- 서버

사용자(클라이언트) -----------------로그인 확인 --------------서버
이후에는 서버에서는 사용자(클라이언트)를 기억할 수 없다.
- 데이터 호출

사용자(클라이언트) ----------------데이터 호출-------------------- 서버

사용자(클라이언트) ----------------데이터 호출 불가-------------- 서버
서버에서는 사용자(클라이언트)가 누군지 알 수 없기에 데이터가 호출이 불가하다.
2. 쿠기가 있을 때
- 로그인

사용자(클라이언트) --------------------------------로그인 정보------------------------------------- 서버

사용자(클라이언트) ------------로그인 확인(쿠키에 정보를 담아 보낸다.) ------------------- 서버
이후에는 서버에서는 쿠키를 통해 사용자(클라이언트)를 알 수 있다.
- 데이터 호출

사용자(클라이언트) --------------데이터 호출(쿠키에 정보를 담아 보낸다.)----------------- 서버

사용자(클라이언트) ------------------------------------데이터 호출 가능--------------------------- 서버
사용자(클라이언트)는 서버에 쿠키를 포함해서 데이터를 요청한다.
쿠키는 Key와 Value로 이루어져 있다.
세션의 탄생
사용자(클라이언트)가 쿠키를 변조해서 서버에 요청을 할 수 있다 => 정보가 탈취된다.
그래서 사용자(클라이언트)가 인증 정보를 변조할 수 없게 하기 위해 세션을 사용한다.
세션은 인증 정보를 서버에 저장하고 데이터에 접근할 수 있는 키를 만들어서 사용자(클라이언트)에게 전달한다.
Key = 랜덤 문자열 = Session ID
세션의 통신
- 로그인

사용자(클라이언트) -------------------------------------로그인 정보-------------------------------- 서버

사용자(클라이언트) ----------로그인 확인(Session ID를 쿠키에 담아서 보낸다.) ----------서버
서버는 사용자(클라이언트)에게 Session ID를 제공한다.
1. 세션이 있을 때
- 데이터 호출

사용자(클라이언트) -------- ---데이터 호출(Session ID를 쿠키에 담아서 보낸다.)-------- 서버

사용자(클라이언트) ---------------------------------데이터 호출 가능------------------------------ 서버
서버는 요청에 포함된 키를 확인하고 데이터를 준다.
2. 세션이 없을 때
- 데이터 호출

사용자(클라이언트) ----------데이터 호출(쿠키를 보낸다.)--------------------------------------- 서버

사용자(클라이언트) ------------------------------데이터 호출 불가---------------------------------- 서버
서버는 요청에 포함된 키가 없기 때문에 데이터를 주지 않는다.
쿠키는 이용자가 저장하며, 세션은 서버가 저장한다는 것에 있어서 차이가 있다.