쿠키는 사용자를 식별하고 세션을 유지하는 방식 중에서 현재까지 가장 널리 사용하는 방식이다. 쿠키는 매우 중요한 웹 기술일 뿐만 아니라 새로운 HTTP 헤더를 정의하므로, 앞서 다룬 기술들보다 더 자세히 살펴볼 것이다. 쿠키는 캐시와 충돌할 수 있어서 대부분의 캐시나 브라우저는 쿠키에 있는 내용물을 캐싱하지 않는다.
둘의 차이점은 파기되는 시점뿐이다.
Discard
파라미터가 설정되어 있거나, Expires
와 Max-Age
파라미터가 없으면 세션 쿠키가 됨.
Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
만료일이 되면 쿠키 삭제
Set-Cookie: max-age=3600 (3600초)
0이나 음수를 지정하면 쿠키 삭제
처음에 사용자가 웹에 방문하면 웹 서버는 사용자에 대해서 아무것도 모른다. 웹 서버는 사용자가 다시 돌아왔을 때, 해당 사용자를 식별하기 위한 유일한 값을 쿠키에 할당한다. 쿠키는 이름=값 형태의 리스트를 가지고, 그 리스트는 Set-Cookie
혹은 Set-Cookie2(확장 헤더)
같은 HTTP 응답 헤더에 기술되어 사용자에게 전달한다.
Set-Cookie
: 서버에서 클라이언트로 쿠키 전달(응답)서버는 쿠키 값으로 데이터베이스에서 사용자의 정보(구매 내용, 주소 정보 등)를 찾는데 사용할 수 있다.
브라우저는 서버로 온 Set-Cookie 헤더에 있는 쿠키 콘텐츠를 브라우저 쿠키 데이터베이스에 저장한다. 사용자가 미래에 같은 사이트를 방문하면, 브라우저는 서버가 이 사용자에게 할당했던 쿠키를 Cookie 요청 헤더에 기술해 전송한다.
➡️ 쿠키를 미사용할 경우, 모든 요청 링크에 사용자 정보를 포함하게 하는 방안이 있는데 비효율적이다. 쿠키를 사용할 경우 모든 요청에 쿠키 정보는 자동으로 포함된다.
set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
보안에 민감한 데이터는 저장하면 안된다.
서버는 쿠키를 생성할 때 Set-Cookie 응답 헤더에 Domain 속성을 기술해서 어떤 사이트가 그 쿠키를 읽을 수 있는지 제어할 수 있다.
domain=example.org
domain=example.org
를 지정해서 쿠키 생성domain=example.org
는 물론이고dev.example.org
도 쿠키 접근example.org
에서 쿠키를 생성하고 domain 지정을 생략example.org
에서만 쿠키 접근dev.example.org
는 쿠키 미접근웹사이트 일부에만 쿠키를 적용할 수도 있다. URL 경로의 앞부분을 가리키는 Path 속성을 기술해서 이 경로를 포함한 하위 경로 페이지만 쿠키 접근이 가능하도록 한다.
path=/home
path=/
루트로 지정path=/home
지정시/home
➡️ 가능/home/level1
➡️ 가능/home/level1/level2
➡️ 가능/hello
➡️ 불가능Secure
, HttpOnly
, SameSite
Secure
HttpOnly
SameSite