
웹사이트 접속 시 사용자의 컴퓨터(브라우저)에 저장되는 작은 텍스트 파일
이를 통해 웹사이트는 사용자의 웹 브라우저를 식별하고,
등과 같은 정보를 저장한다.
이런 정보를 통해 개인 맞춤화 된 웹 경험을 제공하거나, 웹사이트 운영 및 마케팅 전략을 개선하는 데 사용된다.
쿠키는 웹사이트 간에도 전송될 수 있기 때문에, 보안상의 취약점이 발생할 수 있다.
이를 방지하기 위한 방법 중 하나가 sameSite 속성이다.
쿠키에는 여러 속성이 있는데,
sameSite 속성은 웹사이트 간 요청에서 전송될 수 있는지 여부를 설정한다.
즉, 다른 도메인에서 요청할 때 쿠키를 보낼지 말지 결정하는 보안 설정이다.
sameSite 속성에는 세 가지 종류가 있다.
HttpOnly를 사용하면 쿠키를 자바스크립트로 사용하지 못하게 막을 수 있다.
Secure를 지정하면 Https 리퀘스트를 보낼 때만 쿠키를 보낸다.
쿠키의 수명을 지정하는 속성
☑️ 세션 쿠키(Session Cookie)는 Expires나 Max-Age를 지정하지 않으면 만들 수 있다.
세션 쿠키: 브라우저를 닫으면 지워지는 쿠키
☑️ 영속적인 쿠키(Persistent Cookie)는 Expires나 Max-Age로 수명을 지정해서 만들 수 있다.
수명이 다하면 지워지는 쿠키
서버에서 set-cookie 헤더를 리스폰스로 보내주면 웹 브라우저는 알아서 쿠키 값을 저장해 둔다.
Set-Cookie: session-id=1234; Domain=codeit.kr; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=2592000;
session-id: 쿠키의 key 값1234: 벨류 값domain, path,samesite... : 쿠키의 attribute 값리퀘스트를 보낼 때 주소에 해당하는 쿠키가 저장되어 있다면 웹 브라우저가 알아서 쿠키를 보내준다.
Cookie: session-id=1234; Domain=codeit.kr; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=2592000;
보통은 서버가 쿠키 값을 만들고, 클라이언트에서는 웹 브라우저에 맡기고 건드리지 않는 것이 권장된다.
하지만, 클라이언트에서 자바스크립트로 쿠키를 생성/수정/참조 할 수도 있다.
추가, 수정하는 코드
document.cookie = "session-id=1234; Domain=codeit.kr; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=2592000;";
값 지우기
Max-Age 값을 0으로 업데이트하면 지워짐.
document.cookie = "session-id; Max-Age: 0;";
웹 브라우저에서 데이터를 저장하는 데 사용되는 두 가지 저장소 유형
둘의 주요 차이점은 데이터 지속성에 있다.
❗️ 두 저장소 모두 클라이언트 측에 데이터를 저장하므로 중요한 정보나 민감한 정보는 저장하지 않는 것이 좋다.
🌠 쿠키를 사용하면 브라우저에서 데이터를 저장할 수 있는데, 왜 또 다른 객체를 사용해서 데이터를 저장하는 걸까?
폼 입력 값, 현재 페이지 데이터 등
// 값을 저장하는 코드. (이미 값이 있다면) 수정하는 코드
const data = inputElement.value;
sessionStorage.setItem('draft', data);
// 값을 참조해서 사용할 때
const draftData = sessionStorage.getItem('draft');
// 값 지우기
sessionStorage.removeItem('draft');
로그인 정보, 설정, 즐겨찾기 등
// 사용자가 사이드바 감추기 버튼을 클릭했을 때
// 값을 저장, 수정
localStorage.setItem('show-sidebar', 'false');
// 사용자가 처음 접속했을 때
const showSidebar = localStorage.getItem('show-sidebar') === 'true';
// 값 지우기
localStorage.removeItem('show-sidebar');
window.addEventListener("storage", () => {
const showSidebar = localStorage.getItem('show-sidebar') === 'true';
// showSidebar 값 적용하기
});
Window storage evt - Web APIs | MDN
텍스트를 입력하다 실수로 창을 닫아 버리더라도 내용이 남아있게 할 수 있다.
로컬 스토리지를 사용해 구현할 수 있다.
웹 기반으로 만들어진 프로그램(웹 앱)들은 세션, 로컬 스토리지를 사용한다.
예시) 피그마, 노션 등..
코드잇 토픽
HTTP 쿠키 - HTTP|MDN
리액트 쿠키 쉽게 사용하기