쿠키의 모든것

반응형
728x90
반응형

쿠키

쿠키는 사용자를 식별하고 세션을 유지하는 방식 중에서 가장 널리 사용되는 방식이다. 쿠키는 캐시와 충돌할 가능성이 있기 때문에, 대부분의 캐시나 브라우저는 쿠키에 있는 내용물을 캐싱하지 않는다.

 

쿠키의 동작 방식

쿠키는 서버가 사용자에게 붙이는 스티커와 같다. 사용자가 웹 사이트에 방문하면, 웹 사이트는 서버가 사용자에게 붙인 모든 스티커를 읽을 수 있다. 처음에 사용자가 웹 사이트를 방문하면 웹 서버는 사용자에 대해 알수 없다. 웹 서버는 사용자가 다시 돌아왔을 때, 해당 사용자를 식별하기 위한 유일한 값을 쿠키에 할당한다. 쿠키는 임의 이름=값 형태의 리스트를 가지고 그 리스트는 Set-Cookie 또는 Set-Cookie2 같은 HTTP 응답 헤더에 기술되어 사용자에게 전달된다. 쿠키는 어떤 정보든 포함할 수 있다. 브라우저는 서버로 온 헤더에 있는 쿠키 콘텐츠를 브라우저 쿠키 데이터베이스에 저장한다. 사용자가 같은 사이트를 재방문하면 브라우저는 서버가 이 사용자에게 할당했던 쿠키를 Cookie 요청 헤더에 기술해 전송한다.

 

 

 

쿠키의 타입

1) 세션쿠키

사용자가 사이트를 탐색할 때, 관련한 설정과 선호 사항들을 저장하는 임시 쿠키이다. 사용자가 브라우저를 닫으면 삭제된다. 쿠키의 파기 시점을 다루는 Discard 파라미터인 Expires 혹은 Max-Age 파라미터가 없을때 세션쿠키가 된다.

 

2) 지속쿠키

사용자가 브라우저를 닫아도 삭제되지 않고 더 길게 유지될 수 있다. 지속쿠키는 디스크에 저장되어, 브라우저를 닫거나 컴퓨터를 재시작하더라도 남아있다. 사용자가 주기적으로 방문하는 사이트에 대한 설정 정보나 로그인 이름을 유지하려고 사용한다.

 

 

 

클라이언트에서의 쿠키

쿠키의 기본적인 발상은 브라우저가 서버 관련 정보를 저장하고, 사용자가 해당 서버에 접근할 때마다 그 정보를 함께 전송하는 것이다. 브라우저는 쿠키 정보를 저장할 책임이 있는데, 이 시스템을 클라이언트 측 상태라고 한다.

ex. 구글 크롬 쿠키

1) creation_utc : 쿠키가 생성된 시점을 알려준다.
2) host_key : 쿠키의 도메인이다.
3) name : 쿠키의 이름이다.
4) value : 쿠키의 값이다.
5) path : 쿠키와 관련된 도메인에 있는 경로이다.
6) expire_utc : 쿠키의 파기 시점을 알려준다.

 

 

 

사이트마다 각기 다른 쿠키들

브라우저는 수백 수천 개의 쿠키를 가지고 있을 수 있지만, 브라우저가 쿠키 전부를 모든 사이트에 보내지는 않는다. 브라우저는 보통 각 사이트에 두 개 호은 세 개의 쿠키만을 보낸다. 그 이유는 무엇일까?

1) 쿠키는 모두 전달하면 성능이 저하된다. 쿠키를 모두 전달하면 브라우저는 실제 콘텐츠의 바이트보다 더 많은 쿠키 바이트를 전달하게 된다.
2) 쿠키들 대부분은 서버에 특화된 이름/값 쌍을 포함하고 있기 때문에 이를 인식하지 못하는 사이트에서는 무의미한 값이다.
3) 모든 사이트에 쿠키 전체를 전달하는 것은, 특정 사이트에서 제공한 정보를 신뢰하지 않는 사이트에서 가져갈 수 있어서 잠재적인 개인정보 문제를 일으킬 수 있다.

보통 브라우저는 쿠키를 생성한 서버에게만 쿠키에 담긴 정보를 전달한다.

 

 

 

 

쿠키의 domain 속성

서버는 쿠키를 생성할때 Set-Cookie 응답 헤더에 Domain 속성을 기술해서 어떤 사이트가 그 쿠키를 읽을 수 있는지 제어할 수 있다.

 

Set-cookie: user="mary17"; domain="test.com"

 

HTTP 응답 헤더는 브라우저가 user=”mary17”이라는 쿠키를 .test.com 도메인을 가지고 있는 모든 사이트에 전달한다는 의미를 가지고 있다. 만약 사용자가 .test.com으로 끝나는 사이트를 방문하면 위 Cookie 헤더가 항상 적용될 것이다.

 

 

 

 

쿠키의 path 속성

웹 사이트 일부에만 쿠키를 적용할 수 있다. URL 경로의 앞부분을 가리키는 path 속성을 기술해서 해당 경로에 속하는 페이지에만 쿠키를 전달한다.

 

Set-cookie: pref=compact; domain="test.com"; path=/seohae/

 

1) 사용자가 test.com/index.html 에 접근하면 : Cookie: user=”mary17”을 얻는다.
2) 사용자가 test.com/seohae/index.html 에 접근하면 : Cookie: user=”mary17” 과 Cookie: pref=compact 를 얻는다.

 

따라서 쿠키는 일종의 상태 정보라고 할 수 있으며, 서버가 생성하여 클라이언트에 전달하고 클라이언트는 그 쿠키를 유효한 사이트에만 다시 전달하고 관리한다.

 

 

 

마무리

쿠키는 사용하지 않도록 비활성화 시킬 수 있고, 로그 분석 같은 다른 방법으로 대체하는 것도 가능하므로 그 자체가 보안상으로 엄청 위험한 것은 아니다. 쿠키로 개인정보를 다루거나 사용자를 추적하는 기술은 잘못된 의도로 사용될 수 있기 때문에 조심해야한다. 쿠키는 웹 서버가 웹 사용자를 식별하려고 사용하는 작은 데이터 조각이다.

 

 

반응형

'Coding > HTTP' 카테고리의 다른 글

HTTP2.0의 출현  (0) 2019.06.22
웹 캐시에 대해 알아보기  (0) 2019.06.22
TCP 커넥션 관리  (0) 2019.06.22
HTTP 기초개념 알아보기  (0) 2019.06.22
HTTP 메시지  (0) 2019.06.22

Designed by JB FACTORY