(네트워크) 쿠키 정리

<쿠키>

쿠키가 사용되는 이유
-> HTTP프로토콜은 connectionless 하고 stateless한다. 통신이 끝나면 상태 정보를 유지 하지 않는다. 상태정보를 유지하지 않기 때문에 게시판이나 메일 확인시 매번 이동할때마다 로그인을 해야 한다.

그래서 쿠키가 필요하다.


배경 정보 : 쿠키는 웹서버에서 브라우저로 보내는 데이터 문자열.
어떤 브라우저에서 향후 동일한 도메인의 개체를 요청할 경우, 해당 브라우저에서는 동일한 데이터 문자열을 원본 서버에 다시 보낸다.

이 데이터는 "Set-Cookie"라는 HTTP의 헤더 형식으로 웹 서버에 전송된다.

다음은 HTTP 쿠키 트랜잭션이 어떤 형태로 표시되는지에 대한 예입니다.
웹 서버에서 보내는 HTTP 응답:

[...]
Set−Cookie: first.lastname



HTTP GET from the client:

[...]
Cookie: first.lastname


위 샘플 트랜잭션의 경우, 웹 서버에서는 클라이언트에 "first.lastname"이라는 쿠키를 생성하도록 지시했습니다. 다음번에 이 도메인의 개체를 요청할 때 클라이언트에서는 해당 요청 내에 쿠키를 전송합니다. 이는 웹 서버에서 사용자 로그인 같은 특정 정보를 다시 호출할 수 있는 방법을 보여줍니다.


쿠키의 두 가지 유형: 세션 쿠키 및 영구적 쿠키

쿠키에 만료일이 포함되지 않은 경우 세션 쿠키로 간주합니다. 세션 쿠키는 메모리에 저장되며 디스크에 기록되지 않습니다. 브라우저를 닫는 순간 쿠키는 영구적으로 손실됩니다.

쿠키에 만료일이 포함되어 있으면 영구적 쿠키로 간주합니다. 지정된 만료일이 되면 디스크에서 쿠키가 제거됩니다.

쿠키에는 여러 가지 다른 필드를 세미콜론으로 구분하여 포함할 수 있습니다. 정의는 다음과 같습니다.



expires:


expires="Wdy, DD−Mon−YYYY HH:MM:SS GMT" 쿠키가 언제 삭제되는지 결정합니다.


domain: 기본적으로 domain 쿠키를 설정하는 페이지의 호스트 이름으로 설정되므로 동일한 호스트 이렘에 대한 요청이 있을때마다 쿠키 값이 전송된다.

대규모 네트워크의 경우 domain 옵션을 간단히 설정하여 모든 사이트에 대해 단일 쿠키 값을 설정할 수 있습니다.
domain : yahoo.com

브라우저는 이 값과 요청이 전송된 호스트 이름의 꼬리 비교를 수행하고(문자열의 끝에서 비교를 시작) 일치하는 항목이 있으면 해당 헤더를 보낸다. my.yahoo.com, finance.yahoo.com

path:


path=/

쿠키를 반환할 경로를 결정합니다. 이 예에서는 도메인의 루트 경로로 이동할 경우 쿠키가 전송됩니다.



이와 비교 대상으로는 세션이 있다.

여러 쿠키가 있는 경우 세미콜론과 공백으로 구분된다.
Cookie : value1; value2; name1=value1



* 쿠키의 제약 조건
- 클라이언트에 총 300개까지 쿠키를 저장할 수 있다.
-하나의 도메인 당 20개의 값만 가질 수 있다.
(20개 초과시 가장 적게 참조된 쿠키가 지워짐)
-하나의 쿠키값은 4MB까지 저장가능

원래의 사양은 도메인 당 쿠키가 20 개로 제한되어 있었고 초기 브라우저가 이어지고 Internet Explorer 7을 계속 사용했습니다. Microsoft의 업데이트 중 IE 7 의 쿠키 제한 이 50 개 증가했습니다 . IE 8에는 도메인 당 최대 50 개의 쿠키가 있습니다. 파이어 폭스는 또한 쿠키가 50 개로 제한되어 있으며, 오페라는 30 개까지 허용됩니다. Safari와 Chrome은 도메인 당 쿠키 수에 제한이 없습니다

* 쿠키 종류
1. 세션 쿠키 : 쿠키에 만료일이 포함되지 않은 경우, 메모리에 저장되며 디스크에 기록되지 않는다. 브라우저를 닫는순간(서버에서 만료) 영구적 손실
2. 영구 쿠키 : 쿠키에 만료일이 포함된 경우,
브라우저를 종료해도 사용자의 하드에 저장, 만료시기가 되면 삭제. 세션
세션은 서버 메모리에 저장되는 정보다. 서버에 저장되기 때문에 쿠키와는 달리 사용자 정보가 노출되지 않는다.

세션을 사용해도 클라이언트의 쿠키에 저장된 세션 ID를 다른 사람이 가로채서 자신의 세션 ID를 가로챈 세션 ID로 변조해서 사용할 수 있다.
세션을 사용하는 것만으로는 아직 보안에 취약하다. 그래서 IP 정보를 함께 사용하거나 쿠키 값 변조를 확인하는 방법 등으로 보완하여 사용한다.



댓글

이 블로그의 인기 게시물

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬

(18장) WebSocekt과 STOMP를 사용하여 메시징하기