세션 쿠키와 지속 쿠키 - 잘못 알려진 개념

dasong·2021년 12월 20일
post-thumbnail

잘못 알려진 개념

인터넷에서 쿠키를 검색하면 아래처럼 설명하는 글을 종종 볼 수 있습니다.

세션 쿠키: 만료 시점을 정하면 세션 쿠키. 브라우저가 종료되면 쿠키는 사라짐
지속 쿠키: 만료 시점을 정하지 않으면 지속 쿠키. 브라우저가 종료돼도 쿠키는 남아있다.

이걸 읽으면 자연스럽게 의문이 생깁니다.

  • 세션 쿠키에 만료 시점이 있는데, 브라우저가 종료되면 사라진다면 만료 시점은 왜 정하는 걸까?
  • 지속 쿠키에 만료 시점이 없다면, 쿠키가 계속 쌓이기만 할 텐데 어떻게 관리하지?

결론부터 말하면, 위 설명은 세션 쿠키와 지속 쿠키의 정의가 반대로 뒤바뀌어 있습니다.


올바른 정의

  • Expires 또는 Max-Age 속성을 지정하지 않은 쿠키
  • 현재 브라우저 세션이 끝나면(= 브라우저를 닫으면) 삭제됨

MDN에서도 다음과 같이 정의합니다:

Session cookies — cookies without a Max-Age or Expires attribute — are deleted when the current session ends.

Set-Cookie: sessionId=abc123; Path=/; HttpOnly

ExpiresMax-Age가 없으므로 이 쿠키는 세션 쿠키입니다. 브라우저를 닫으면 사라집니다.

RFC 6265 Section 5.3에서는 ExpiresMax-Age가 모두 없는 쿠키에 대해 persistent-flagfalse로 설정하도록 명시하고 있습니다.

  • Expires 또는 Max-Age 속성을 지정한 쿠키
  • 브라우저를 닫아도 유지되며, 지정된 만료 시점이 되면 삭제됨
Set-Cookie: rememberMe=true; Path=/; Max-Age=2592000; HttpOnly

Max-Age=2592000(30일)이 지정되어 있으므로 이 쿠키는 지속 쿠키입니다. 브라우저를 닫아도 30일간 유지됩니다.


Expires vs Max-Age

지속 쿠키의 만료 시점을 지정하는 방법은 두 가지입니다.

속성값 형식의미
Expires절대 날짜 (Thu, 01 Jan 2026 00:00:00 GMT)해당 날짜/시간에 만료
Max-Age초 단위 정수 (2592000)쿠키 생성 시점으로부터 해당 초 후 만료

둘 다 지정된 경우 Max-Age가 우선합니다. Max-Age는 상대적 시간이라 서버-클라이언트 간 시간 차이 문제를 피할 수 있어 더 권장됩니다.

참고로, Max-Age=0 또는 과거 날짜의 Expires를 지정하면 쿠키가 즉시 삭제됩니다. 서버에서 클라이언트의 쿠키를 삭제할 때 이 방법을 사용합니다.

Set-Cookie: sessionId=; Path=/; Max-Age=0

브라우저 세션 복원과 세션 쿠키

한 가지 주의할 점이 있습니다. MDN 문서에도 명시되어 있는 내용인데요:

Some browsers use session restoring when restarting. This can cause session cookies to last indefinitely.

Chrome의 경우, 설정 > "시작 그룹"에서 "중단한 부분에서 계속하기"를 선택하면 브라우저를 껐다 켜도 이전 탭들이 복원됩니다. 이때 세션 쿠키 역시 함께 복원됩니다.

즉, 세션 쿠키라고 해서 브라우저를 닫으면 반드시 사라진다고 보장할 수는 없습니다. 보안에 민감한 경우라면 서버 측에서도 세션 만료를 별도로 관리해야 합니다.


"세션 쿠키 = 메모리, 지속 쿠키 = 디스크"?

또 하나 흔히 보이는 설명이 있습니다.

세션 쿠키는 브라우저 메모리에, 지속 쿠키는 디스크에 저장된다.

이 구분은 RFC 6265 어디에도 명시되어 있지 않으며, 과거 브라우저 구현 방식에서 유래한 설명입니다. 현대 브라우저들은 크래시 복구(crash recovery)나 세션 복원을 위해 세션 쿠키도 디스크에 기록합니다. 위에서 살펴본 세션 복원 동작이 가능한 이유이기도 합니다.

실제로 Chromium의 쿠키 저장소 문서에는 다음과 같이 기술되어 있습니다:

The cookie may also be persisted to disk [...] depending on factors like whether the cookie is a persistent cookie (has an expiration date), whether session cookies should also be persisted (e.g. if the browser is set to restore the previous browsing session), and whether the profile should have persistent storage.

즉, 브라우저 설정에 따라 세션 쿠키도 디스크의 SQLite DB에 저장됩니다. 두 쿠키의 본질적인 차이는 저장 위치가 아니라 만료 정책(Expires/Max-Age 유무)입니다.


실무에서의 사용 예시

용도쿠키 종류이유
로그인 세션 토큰세션 쿠키브라우저를 닫으면 로그아웃 처리
"로그인 상태 유지" 체크지속 쿠키브라우저를 닫아도 로그인 유지
장바구니 (비로그인)세션 쿠키임시 데이터이므로 세션 단위로 관리
다크모드 등 사용자 설정지속 쿠키재방문 시에도 설정 유지
GDPR 쿠키 동의 여부지속 쿠키매번 물어보면 안 됨

정리

세션 쿠키지속 쿠키
Expires/Max-Age없음있음
생존 범위브라우저 세션만료 시점까지
브라우저 종료 시삭제 (세션 복원 제외)유지

핵심은 단순합니다: ExpiresMax-Age가 있으면 지속 쿠키, 없으면 세션 쿠키.

잘못된 정보가 꽤 돌아다니고 있으니, 공식 문서를 직접 확인하는 습관이 중요합니다.


참고 자료

profile
소비자에서 생산자로

0개의 댓글