쿠키는 브라우저에 저장되는 작은 크기의 문자열이다. 쿠키는 주로 웹 서버에 의해 만들어지는데, 서버가 HTTP 응답 헤더의 Set-Cookie에 내용을 넣어 전달하면 브라우저는 이 내용을 자체적으로 브라우저에 저장하는데 이걸 쿠키라한다. 브라우저는 사용자가 쿠키를 생성하도록 한 동일 서버에 접속할 때마다 쿠키의 내용을 Cookie 요청 헤더에 넣어서 함께 전달한다. 쿠키는 클라이언트 식별과 같은 인증에 많이 쓰인다.
document.cookie 프로퍼티를 이용해 브라우저에서도 쿠키에 접근이 가능하다. document.cookie는 name=value 쌍으로 구성되고, 각 쌍은 ;로 구분된다. document.cookie에 값을 할당하면, 브라우저는 이 값을 받아 해당 쿠키를 갱신하고, 다른 쿠키의 값은 변경되지 않는다.
document.cookie = "user=John"; // 이름이 'user'인 쿠키의 값만 갱신함
형식의 유효성을 일관성 있게 유지하기 위해 반드시 encodedURIComponent를 사용해 이름과 값을 처리하는 게 좋다.
쿠키의 값은 4kb를 넘을 수 없다.
몇몇 옵션들
path : URL path의 접두사로, 이 경로나 이 경로의 하위 경로에 있는 페이지만 쿠키에 접근할 수 있다.
ex. path = /admin 옵션을 사용하면 /admin, /admin/test에선 접근 가능하지만 /test 에선 접근이 불가능하다.
domain: 쿠키에 접근 가능한 domain을 지정한다. 서브 도메인에서도 접근할 수 있게 할 때 많이 쓰인다.
expires,max-age : expires나 max-age 옵션이 지정되어 있지 않으면, 브라우저가 닫힐 때 쿠키도 함께 삭제된다. 이를 세션 쿠키라고 부른다. expires나 max-age를 설정햇을 땐 브라우저를 닫아도 쿠키가 삭제되지 않고 유효 일자까지 쿠키를 유지하다가 유효 일자가 되면 쿠키를 자동으로 삭제한다.
secrue: secure 옵션을 설정하면 HTTPS로 통신하는 경우에만 쿠키가 전송된다.
브라우저 내에 키-값 쌍을 저장할 수 있게 해준다. 이 둘에 저장된 값은 새로고침하고 브라우저를 다시 실행해도(localStorage의 경우) 데이터가 사라지지 않고 남아있다. 이 둘은 쿠키와 다르게 네트워크 요청 시 서버로 전송되지 않는다. 그렇기 때문에 쿠키보다 더 많은 용량인 2MB 이상을 저장할 수 있다. 서버가 HTTP 헤더를 통해 스토리지 객체를 조작할 수 없다. 스토리지 객체는 도메인, 프로토콜, 포트로 정의되는 오리진에 묶여 있어 이들 중 하나가 다르면 데이터에 접근할 수 없다.
APIs
localStorage
sessionStorage