브라우저에 저장되는 작은 크기의 문자열(최대 4KB)
Set-Cookie: <cookie-name> = <cookie-value>
Set-Cookie: <cookie-name> = <cookie-value>; Expires=<date>
Set-Cookie: <cookie-name> = <cookie-value>; Max-Age=<number>
만료기간에 따라 영구 쿠키와 새션 쿠키로 나눔
영구 쿠키 (Persistent Cookie) |
세션 쿠키 (Session Cookie) |
---|---|
만료 기간 O | 만료 기간 X |
만료 기간이 끝난 후 삭제 | 브라우저 종료 시 삭제 |
쿠키 종류
퍼스트파트 쿠키 (First party Cookie) |
서드파티 쿠키 (Third party Cookie) |
---|---|
같은 도메인 naver.com | 다른 도메인 facebook.com |
서브 도메인 m.naver.com | - |
서드파티 쿠키
CSRF | 사용자의 권한을 이용한 공격 (비밀번호 변경, 결제 요청 등) |
---|---|
XSS
Reflected XSS Stroed XSS Dom-based XSS |
사용자의 민감한 정보 탈취(토큰) |
부족한 저장 용량 | 4KB |
HTTP 요청 시 자동으로 모든 쿠키 전송 | 불필요한 트래픽 증가 |
웹 스토리지는 HTML5에서 추가된 저장소.
5MB의 저장 용량 | 쿠키의 부족한 저장 용량 문제 해결 |
---|---|
요청 시 Headers에 전송하지 않음 | 쿠키의 CSRF, 트래픽 문제 해결 |
문자열만 저장 가능 | 직렬화를 통해 객체 저장 가능 |
/ | 로컬 스토리지 | 세션 스토리지 |
---|---|---|
저장 범위 | 도메인 / 브라우저 | 도메인 / 브라우저 / 탭 |
데이터 영구 | O (직접 삭제 시) | X (윈도우, 탭 닫을시 내용 제거) |
사용방법 | 자동 로그인 | 일회성 로그인 |
주의사항 | 비밀번호와 같은 중요 정보는 절대 저장 X |
XSS | 자바스크립트로 접근 가능 |
---|---|
독립된 스토리지 | 브라우저 / 탭(세션 스토리지) 간 공유 불가 |
만료 기간 설정 불가 | |
동기적 실행 | 메인 스레드 블로킹 용량이 크다면 IndexedDB 고려 |