[개념정리] 쿠키 옵션 총정리

짜장킴·2025년 9월 23일

프로젝트

목록 보기
29/38

1. maxAge / expires

  • 쿠키의 유효 기간을 설정하는 옵션
  • maxAge가 있으면 expires보다 우선

특징

  • maxAge: 초 단위 (예: 60 60 24 = 하루) → “지금부터 몇 초”
  • expires: 특정 날짜/시간을 지정 → “언제까지”
setCookie("token", "abc123", { maxAge: 60 * 60 }); // 1시간

2. path

  • 쿠키가 유효한 URL 경로
  • 기본값: / (사이트 전체에서 전송됨)
  • 특정 경로만 유효하게 제한 가능
// /dashboard 이하에서만 자동 전송됨
setCookie("token", "abc123", { path: "/dashboard" });

3. domain

  • 쿠키가 유효한 도메인
  • 기본값: 현재 도메인
  • 서브도메인까지 공유하고 싶으면 .example.com처럼 설정
// app.example.com, api.example.com 모두 접근 가능
setCookie("token", "abc123", { domain: ".example.com" });

4. secure

  • HTTPS에서만 쿠키를 전송
  • 보안상 꼭 켜야 함 (HTTP에서는 전송되지 않음)
setCookie("token", "abc123", { secure: true });

// 보통 프로덕션 환경에서만 true
const isProd = process.env.NODE_ENV === "production";
setCookie("token", "abc123", { secure: isProd });

5. httpOnly

  • JavaScript(document.cookie)에서 접근 불가능
  • 서버에서만 읽을 수 있음
  • XSS 공격 방지에 필수
  • cookies-next, js-cookie 같은 클라이언트 라이브러리에서는 못 씀
  • 서버에서만 설정 가능
cookies().set("token", "abc123", { httpOnly: true });

httpOnly: false

  • JavaScript에서 document.cookie 또는 cookies-next, js-cookie 같은 라이브러리로 쿠키에 접근 가능
  • 즉, 클라이언트 코드에서 읽기/쓰기 가능
  • 보안상 취약점(XSS 노출)

6. sameSite

  • 다른 사이트에서 요청할 때 쿠키를 보낼지 여부 결정
  • lax (기본): 안전한 요청(GET, 링크 이동 등)에서는 전송, cross-site POST에는 전송 안 함
  • strict: 완전히 같은 사이트에서만 쿠키 전송
  • none: 모든 요청에 전송 (이 경우 secure: true 필수)
setCookie("token", "abc123", { sameSite: "lax" }); // 기본
setCookie("token", "abc123", { sameSite: "strict" }); // 같은 사이트만
setCookie("token", "abc123", { sameSite: "none", secure: true }); // cross-site 허용

실제 예시(strict)

  • a.com 로그인 상태에서,
  • b.com 블로그 글에 <a href="https://a.com/profile"> 클릭 → 쿠키가 안 붙음 → 로그인 풀린 것처럼 보임

7. priority (신규 옵션)

  • 브라우저가 쿠키 용량 초과 시 어떤 쿠키를 먼저 지울지 결정
  • 값: "low" | "medium" | "high"
profile
프론트엔드 취준생입니다.

0개의 댓글