쿠키(웹 쿠키, 브라우저 쿠키)는 기본적으로 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다.(클라이언트에서 생성할 수도 있음) 브라우저는 쿠키를 저장해 놓았다가, 서버 요청 시 함께 전송한다. 4kb 용량 제한이 있다.
세션 쿠키(Session Cookie)
세션 쿠키는 현재 세션이 끝날 때(브라우저를 닫을 때) 삭제된다.
영속적인 쿠키(Persistent Cookie)
영속적인 쿠키는 Expires 속성에 명시된 날짜에 삭제되거나, Max-Age 속성에 명시된 기간 이후에 삭제된다.쿠키를 저장할때 expires나 max-age 속성을 특별히 설정하지 않으면 세션 쿠키가 된다.
클라이언트에서 js로 쿠키를 저장할때 아래와 같이 작성한다
document.cookie = "COOKIE_NAME=cute; max-age=3600 * 24 * 7; Path=/;"; //이 외 필요한 속설들을 지정하도록 한다.
SameSite
속성으로 None
을 사용하려면 반드시 해당 쿠키는 Secure
쿠키여야 한다. Strict→도메인이 다르면 전송하지 않는다. Lax→Strict 보다 비교적 느슨한 정책이다.function setCookie(name, value, days) {
let expires = "";
if (days) {
const date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
setCookie("username", "John", 30);
function getCookie(name) {
const cookies = document.cookie.split(';');
for(let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
if (cookie.startsWith(name + "=")) {
return cookie.substring(name.length + 1);
}
}
return null;
}
const username = getCookie("username");
function deleteCookie(name) {
document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
}
deleteCookie("username");
function updateCookie(name, value, days) {
setCookie(name, value, days);
}
브라우저마다 보안정책으로 인한 쿠키 최대 저장기간이 다르다. 사파리는 최대 7일이다. 굉장히 짧다.
크로스브라우징에 대응하는 코드를 짜다보면 사파리가 정말 싫어진다.
매 서버 요청마다 쿠키가 함께 전송되기 때문에 쿠키에 많은 정보를 저장하다 보면 네트워크 성능이 안 좋아질 수 있다.따라서 웹스토리지(localStorage,sessionStorage),indexedDB를 적절하게 사용하도록 하자.