본문 바로가기

Network

[Network] Cookie / Session이란 무엇인가? - 티스토리

 

 

Cookie란?


 

네트워크에서 쿠키란 서버가 클라이언트의 정보를 기억하기 위해 사용한다. (웹 서버는 HTTP의 ConnectionlessStateless의 특성 때문에 클라이언트 정보를 기억할 수 없다.)

 

Connectionless: 하나의 요청에 대해 하나의 응답을 한 후 연결을 종료함. (새 요청이 있을 때마다 새로운 연결을 생성함)

Stateless: 통신이 끝난 후 상태 정보를 저장하지 않는다.

 

쿠키는 다음과 같은 세 가지 목적을 가지고 있다.

 

1. 사용자 세션

- 특정 사용자의 세션과 연결 시킨다.

 

2. 개인화

- 사용자에게 맞는 적절한 페이지를 보여준다.

 

3. 추적

- 사용자의 웹 사이트 방문 기록을 추적하여 기록한다.

 

클라이언트가 서버에 요청을 보내면 서버는 쿠키를 발급한 후 응답에 같이 전송한다.

 

1. 클라이언트 요청 -> 서버 응답 (쿠키 포함)

2. 클라이언트 요청 (쿠키 포함) -> 서버 응답

 

쿠키는 클라이언트 측 브라우저에 저장된다.

 

 

** 쿠키를 해커가 탈취하여 서버에 HTTP 요청과 같이 전송하면 임의 사용자의 권한을 획득할 수 있다.

 

 

 

쿠키 생성


Set-cookie, Cookie

 

쿠키의 데이터 형태는 Key와 Value로 구성된 String이며  4KB 이상 저장할 수 없다.

서버는 클라이언트 측에 응답할 때 Set-cookie 헤더에 쿠키 값을 포함하여 응답할 수 있다. 만료일 또는 지속시간을 명시할 수 있으며, 만료된 쿠키는 더 이상 보내지지 않는다. 또한 브라우저 마다 쿠키는 다르기 때문에 다른 브라우저면 서버는 다른 사용자로 인식한다.

쿠키는 클라이언트 측에서 관리되기 때문에 조회, 수정, 추가를 할 수 있다.

 

쿠키 설정은 다음과 같다.

 

서버측

 

Set-Cookie: "cookie-name=cookie-value"

HTTP/1.1 200OK
Server Apache
Set-Cookie: name=test

 

 

클라이언트측

 

Cookie: "cookie-name=cookie-value"

GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry

// 자바스크립트를 활용해 설정 가능, document.cookie = "name=test"

 

세션이란?


 

세션이란 클라이언트가 서버에 요청한 시점부터 종료되는 시점까지 해당 연결을 유지하는 기술이다.

 

세션은 다음과 같이 동작한다.

 

1. 클라이언트 요청 -> 서버 응답 (쿠키에 세션 ID 포함)

2. 클라이언트 요청 (세션 ID 포함) -> 서버 응답 (세션 ID에 해당하는 연결 정보를 찾아 응답하게 됨)

 

즉, 직접적인 정보가 쿠키에 포함되지 않고 유일한 세션 ID가 쿠키에 포함 되며, 서버 측에선 세션 ID에 해당하는 연결 정보를 매칭하여 응답하게 된다.

 

이로써 쿠키 변조에 대한 위협에 대응할 수 있다.

 

그러나 이 또한, 세션 ID가 탈취될 경우 무용지물