document.cookie= 는 getter와 setter같이 동작한다고 이해하면 된다.
setter를 수행할때 모든 쿠키를 덮어쓰지 않고, 명시된 쿠키인 user의 값만 갱신한다.
쿠키의 이름과 값엔 특별한 제약이 없기 때문에 모든 글자가 허용된다. 하지만 형식의 유효성을 일관성 있게 유지하기 위해 반드시 내장 함수 encodeURIComponent를 사용하여 이름과 값을 이스케이프 처리해 줘야 하는게 좋다.
// Name이 user고, Value가 John인 쿠키 추가
// document.cookie = 했다고 초기화되는게 아니라, setter처럼 작동하게 된다.
// 그래서 = "user=John"하면 전체가 'user=john'이 되는게 아니라 '+= user=john'이 추가되게 된다.
document.cookie = "user=John";
delete
만료 기간을 과거로 바꾸어 버리면 된다.
단, 쿠키 요소를 삭제할때 반드시 path를 맞춰야 한다.삭제가 안된다면, 개발자도구에서 쿠키path를 필히 확인 해 볼것
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
// max-age 사용
// 1시간 뒤에 쿠키가 삭제됩니다.
document.cookie = "max-age=3600";
// 만료 기간을 0으로 지정하여 쿠키를 바로 삭제함
document.cookie = "max-age=0";
Tip
! 쿠키의 한계 쿠키엔 몇 가지 제약 사항이 있다. encodeURIComponent로 인코딩한 이후의 name=value 쌍은4KB를 넘을 수 없다. 이 용량을 넘는 정보는 쿠키에 저장할 수 없다. 도메인 하나당 저장할 수 있는 쿠키의 개수는 20여 개 정도로 한정되어 있다. 개수는 브라우저에 따라 조금씩 다르다.
var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
deleteCookie(name.trim());
}
console.log('all cookies deleted !')
}
(부록) 서드파트 쿠키
사용자가 방문 중인 도메인이 아닌 다른 도메인에서 설정한 쿠키를 "서드 파티 쿠키(third-party cookie)"라고 부릅니다.
예시:
1. site.com의 특정 페이지에서 이미지 배너(banner)를 불러옵니다. 배너는 다른 도메인
<imgsrc="https://ads.com/banner.png">
에서 가져옵니다.
2. ads.com에 있는 원격 서버는 배너와 함께 Set-Cookie 헤더를 전송해 브라우저가 id=1234와 같은 쿠키를 설정하도록 합니다. 이 쿠키는 ads.com 도메인에서 설정한 것이기 때문에 ads.com에서만 볼 수 있습니다.
3. 사용자가 ads.com에 다시 접속하면, 원격 서버는 요청과 함께 전송받은 쿠키의 id를 이용해 해당 유저를 인식합니다.
4. 사용자가 site.com을 떠나 other.com에 접속하고 이 사이트에도 배너가 있으면 ads.com은 또 쿠키를 전송받습니다. 이 쿠키는 ads.com에서 설정한 것이기 때문이죠. 이를 이용해 ads.com은 사용자를 인식하고, 이 사용자가 어떤 사이트로 이동했는지를 추적합니다.
광고회사는 사용자의 이용 행태를 추적하고, 광고를 제공하기 위해 오래전부터 서드 파티 쿠키를 사용하고 있습니다.
서드파티 쿠키는 쿠키를 설정한 도메인에 종속되기 때문에 ads.com은 사용자가 어떤 사이트를 방문했는지 추적할 수 있습니다.
그런데 사람들은 누군가 자신을 감시하는 걸 좋아하진 않습니다. 브라우저엔 이런 쿠키를 비활성화 할 수 있는 기능이 있는데, 이 기능을 사용하면 추적을 막을 수 있습니다.
여기에 더하여 몇몇 모던 브라우저는 서드 파티 쿠키를 위한 특별한 정책을 도입하여 광고회사의 추적을 막을 수 있게 합니다.
- Safari는 서드파티 쿠키를 전면적으로 허용하지 않습니다.
- Firefox는 서드 파티 도메인 "블랙 리스트(black list)"를 만들어 리스트에 오른 도메인의 서드 파티 쿠키를 차단합니다.
Tip
주의:
script src="https://google-analytics.com/analytics.js" 같은 태그로 서드 파티 도메인에서 스크립트를 읽어오고, 이 스크립트 안에 document.cookie로 쿠키를 설정하는 코드가 있다면, 이때 만들어진 쿠키는 서드파티 쿠키가 아닙니다. 스크립트에서 쿠키를 설정한 경우에 만들어지는 쿠키는 현재 페이지의 도메인에 속하게 됩니다. 스크립트의 유래와 상관없이 말이죠.