쿠키 속성

웹 서버가 리소스 요청에 응답할 때 서버는 응답과 함께 Set-Cookie 헤더를 포함할 수 있습니다. 이 헤더는 브라우저에 쿠키를 저장하도록 지시합니다. 예를 들면 Set-Cookie:cat=tabby입니다. 쿠키란 무엇인가요?에서 쿠키의 작동 방식을 설명합니다.

Set-Cookie는 쿠키 이름과 값을 제공하는 것 외에도 쿠키가 설정되는지 여부와 만료 시점을 제어하는 속성을 포함할 수 있습니다. 쿠키 속성은 세미콜론으로 구분됩니다. 예를 들면 다음과 같습니다.

    Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;

이 도움말에서는 가장 중요한 쿠키 속성을 설명합니다.

HTTP 쿠키 사용에서는 쿠키 속성을 더 기술적으로 자세히 설명합니다.

보안

👉 모든 쿠키에 기본적으로 Secure를 포함해야 합니다.

Set-Cookie 헤더에 Secure가 포함된 경우 쿠키는 HTTPS 프로토콜을 사용하는 암호화된 요청에만 포함됩니다. 쿠키는 HTTP 요청에 포함되지 않습니다. 이렇게 하면 공격자가 브라우저와 서버 간의 통신에 몰래 개입하여 정보를 전달하고 잠재적으로 이를 변경하는 중간자 공격을 방지하는 데 도움이 됩니다.

HTTPOnly

👉 모든 쿠키에 기본적으로 HTTPOnly를 포함해야 합니다. JavaScript 액세스가 필요한 경우에만 생략하세요.

Set-Cookie 헤더에 HTTPOnly가 포함된 경우 document.cookie를 사용하여 쿠키에 액세스할 수 없습니다. 이렇게 하면 쿠키를 타겟팅하는 특정 유형의 공격으로부터 보호할 수 있습니다.

SameSite

👉 값이 설정되지 않은 경우 기본값은 SameSite=Lax입니다. SameSite=None는 교차 사이트 쿠키를 허용하지만 서드 파티 쿠키 제한이 적용되는 위치에서는 쿠키가 차단됩니다.

방문 중인 사이트와 다른 사이트의 리소스를 요청하는 경우 크로스 사이트 요청입니다. 교차 사이트 요청에 대한 응답으로 설정된 쿠키를 서드 파티 쿠키라고 합니다. 자세한 내용은 서드 파티 쿠키란 무엇인가요?를 참고하세요.

SameSite 속성은 서드 파티 쿠키가 요청에 포함될지 여부를 제어합니다. 가능한 값은 Strict, Lax, None의 세 가지입니다.

엄격

쿠키는 쿠키의 출처 사이트에 있는 페이지의 요청에 대한 응답으로만 전송됩니다. 예를 들어 사용자가 cats.example를 방문하고 SameSite=Strict 속성이 설정된 쿠키가 있다고 가정해 보겠습니다. 나중에 사용자가 다른 사이트에 있는 상태에서 cats.example의 페이지로 연결되는 링크를 클릭합니다. 설정된 쿠키는 해당 요청에 포함되지 않습니다.

느슨함

이는 Strict와 동일한 방식으로 작동하지만, 사용자가 쿠키의 출처 사이트로 연결되는 링크를 클릭할 때 브라우저에 쿠키가 포함된다는 점이 다릅니다. (이전 Strict 예시에서 사용자가 cats.example 링크를 클릭하면 쿠키가 포함됩니다.) Set-Cookie 헤더에 SameSite 속성이 포함되지 않은 경우 기본값은 Lax입니다.

없음

제약사항 없음: 쿠키는 크로스 사이트 여부와 관계없이 요청에 포함됩니다. SameSite=None의 경우 쿠키에 Secure 속성도 있어야 합니다.

자세히 알아보기: SameSite 쿠키 설명

분할됨

👉 서드 파티 쿠키를 만드는 경우 여러 삽입에서 공유해야 한다는 것을 명시적으로 알고 있지 않는 한 기본적으로 Partitioned 속성을 포함해야 합니다.

이 속성을 사용하면 최상위 사이트마다 별도의 '쿠키 저장소'를 사용하여 분할된 스토리지에 쿠키를 선택할 수 있습니다. 쿠키는 최상위 사이트와 쿠키를 설정하는 도메인에 의해 이중 키로 설정됩니다.

예를 들어 웹사이트 A와 웹사이트 B에 모두 웹사이트 C의 iframe이 포함되어 있다고 가정해 보겠습니다. 웹사이트 A의 iframe에서 설정한 분할된 쿠키는 웹사이트 B의 iframe에서 액세스할 수 없습니다. AC 쿠키는 BC 쿠키와 별개입니다.

공통 서드 파티를 삽입하는 두 개의 서로 다른 웹사이트가 더 이상 해당 서드 파티의 쿠키를 공유하지 않음을 보여주는 다이어그램
쿠키 분할을 사용하면 한 최상위 사이트에 삽입될 때 쿠키를 설정하는 서드 파티 서비스가 다른 최상위 사이트에 삽입될 때 동일한 쿠키에 액세스할 수 없습니다.

Partitioned 속성이 있는 쿠키는 CHIPS(Cookies Having Independent Partitioned State)라고 합니다.

파티션된 쿠키에는 Secure 속성이 있어야 합니다.

자세한 내용은 Cookies Having Independent Partitioned State를 참고하세요.

만료 및 최대 수명

👉 현재 세션보다 오래 지속되는 쿠키가 필요하지 않은 한 Max-AgeExpires 속성을 생략합니다. 브라우저에서 쿠키를 만료하므로 몇 년 후의 만료를 설정하는 것은 의미가 없습니다. 대신 사용자가 사이트를 다시 방문할 때 쿠키를 새로고침하는 것이 좋습니다.

쿠키를 삭제하고 더 이상 전송하지 않아야 하는 Expires 날짜 및 시간 또는 Max-Age(초)을 지정할 수 있습니다. 예를 들면 다음과 같습니다.

  • Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
  • Set-Cookie:cat=tabby; Max-Age=86400

Max-Age 또는 Expires 속성을 지정하지 않으면 현재 세션이 종료될 때 쿠키가 삭제됩니다. 이러한 유형의 쿠키를 세션 쿠키라고도 합니다.

도메인

👉 하위 도메인 요청에 쿠키를 포함해야 하는 경우가 아니라면 Domain 속성을 포함하지 마세요.

Set-Cookie 헤더에 Domain 속성이 있는 경우 지정된 도메인 및 해당 하위 도메인에 대한 요청에 쿠키가 포함됩니다.

Set-Cookie 헤더에 Domain 속성이 없으면 쿠키가 하위 도메인 요청에 포함되지 않습니다.

즉, Domain 속성을 포함하면 도메인 제한이 줄어듭니다.

예를 들어 웹사이트 cats.example의 응답은 다음과 같습니다.

  • Set-Cookie:cat=tabby
    쿠키는 cats.example에 대한 요청에만 포함됩니다.
  • Set-Cookie:cat=tabby; Domain=cats.example
    쿠키는 cats.example 요청과 함께 포함되며 fluffy.cats.example 또는 user.assets.cats.example와 같은 하위 도메인의 리소스에 대한 요청에도 포함됩니다.

경로

👉 사이트의 모든 경로에 대한 요청에 쿠키를 포함해야 하는 경우 쿠키와 함께 Path=/를 포함합니다. 보안 보호를 위해 Path를 사용하지 마세요.

Path 속성이 Set-Cookie 응답 헤더에 포함된 경우 설정된 쿠키는 Path 값과 일치하는 쿠키를 설정하는 사이트의 URL 요청에만 포함됩니다.

예를 들면 다음과 같습니다.

  • Set-Cookie:cat=tabby; Path=/articles
    /articles로 시작하는 URL 경로에 대한 요청에 쿠키가 포함됩니다.
    https://cats.example/articles/tabby/index.html
    https://cats.example/articles/breeds/tabby/index.html
    https://cats.example/images/tabby.jpg
    https://cats.example/en/articles/tabby/index.html
  • Set-Cookie:cat=tabby; Path=/
    사이트의 모든 URL에 대한 모든 요청에는 쿠키가 포함됩니다.

Set-Cookie 응답 헤더에 Path 값이 없으면 쿠키는 동일한 디렉터리에 대한 요청에만 포함됩니다. 예를 들어 cats.example/images/tabby.jpg. 요청에 대한 응답으로 cat=tabby 쿠키가 설정되었다고 가정해 보겠습니다. Path가 설정되지 않은 경우 쿠키는 cats.example/images 디렉터리 내 파일 요청에만 포함됩니다.

데모

도구

자세히 알아보기