LOTS-OResearch Notes

TL;DR

  • 쿠키(cookie)는 브라우저가 저장했다가 전송 조건이 맞는 요청에 자동으로 붙이는 작은 키-값이다.
  • 쿠키는 클라이언트의 저장·운반 수단이고 세션은 여러 요청에 상태를 연결하는 논리적 범위다.
  • 흔히 쿠키가 세션 식별자를 실어 나르지만 둘은 같은 것이 아니다.

쿠키: 브라우저가 기억하고 되돌려보내는 키-값

쿠키는 브라우저가 저장하는 이름=값 쌍이다. 서버는 응답의 Set-Cookie 헤더로 쿠키를 설정할 수 있고 JavaScript로 설정하는 쿠키도 있다. 브라우저는 도메인·경로·보안 속성·SameSite·브라우저 정책 등 전송 조건이 맞으면 Cookie 헤더에 값을 담는다. 인증용 쿠키를 받은 서버는 그 값을 검증하거나 세션 저장소에서 조회해 로그인 상태를 판단한다. MDN Set-Cookie.

쿠키가 오가는 흐름

서버가 Set-Cookie로 설정하고 브라우저가 저장한 쿠키는 전송 조건이 맞는 후속 요청에 자동으로 붙는다. 아래 chat-42는 설명용 값이며 실제 인증 세션 ID는 예측하기 어렵게 생성해야 한다.

sequenceDiagram
    participant B as 브라우저
    participant S as 서버 (example.com)

    B->>S: 첫 요청 (쿠키 없음)
    S-->>B: 응답 · Set-Cookie: session=chat-42
    Note over B: 브라우저가 쿠키 저장 (도메인·만료와 함께)

    B->>S: 이후 요청 · Cookie: session=chat-42
    Note over B,S: 쿠키 전송 조건을 만족하면 자동 전송
    S-->>B: 세션 ID 검증·조회 후 응답

웹 화면에서 실제로 겪는 쿠키

  • 쿠키는 일반적으로 같은 브라우저 프로필의 탭 사이에서 공유되므로 탭 하나를 닫는 것만으로 로그아웃되지는 않는다.
  • 만료 설정이 없는 세션 쿠키(session cookie)는 브라우저가 정하는 세션 종료 시점까지 보관된다. 세션 복원 기능으로 브라우저 재시작 후에도 복원될 수 있다.
  • 지속 쿠키(persistent cookie)는 만료 설정에 따라 재시작 후에도 남을 수 있지만 서버 세션이 만료·취소됐다면 로그인은 유지되지 않는다.
  • "이 사이트는 쿠키를 사용합니다" 배너는 로그인 유지·분석·광고 추적에 쿠키를 쓴다는 고지다.
  • 개발자도구 > Application > Cookies에서 사이트가 심어 둔 쿠키의 이름·값·만료·도메인을 직접 볼 수 있다.

세션 쿠키와 지속 쿠키

구분세션 쿠키지속 쿠키
만료 설정없음 (Expires/Max-Age 미지정)있음 (특정 시각까지)
수명브라우저가 정하는 세션 동안; 세션 복원으로 유지될 수 있음설정한 만료까지 보관 가능; 사용자 삭제·정책 등에 따라 먼저 제거될 수 있음
임시 로그인, 일회성 폼 상태"로그인 상태 유지" 체크

여기서 "세션 쿠키"의 세션은 브라우저가 정하는 수명을 가리키며 서버의 로그인 세션과는 다른 층위다. 쿠키 보관 기간과 서버의 인증 유효 기간은 일치하지 않을 수 있다. MDN의 세션 복원 주의사항.

세션과 쿠키의 차이

쿠키와 세션은 층이 다르다. 쿠키는 클라이언트의 저장·운반 메커니즘이고 세션은 여러 요청을 하나로 묶어 상태를 적용하는 논리적 범위다. 서버 저장형 세션에서는 쿠키가 세션 식별자를 운반한다.

질문쿠키세션
어디에 있나클라이언트(브라우저)상태는 서버 저장소 또는 클라이언트 등에 보관
무엇인가저장·운반 수단(HTTP 헤더)상태를 묶는 논리적 범위
무엇을 담나세션 ID 또는 작은 값로그인 여부, 권한, 진행 상태
대안다른 헤더 등으로 식별자 전달필요한 문맥을 요청마다 직접 전달하는 방식 등

쿠키 없이 다른 헤더로 식별자를 보내도 세션은 성립한다. 서명 쿠키에 세션 상태를 담으면 서버 측 세션 저장소 없이 구현할 수도 있지만 논리적 세션까지 없어지는 것은 아니다. Flask의 기본 세션이 이 방식을 사용한다. Flask Sessions.

로그인 쿠키에는 HTTPS와 Secure·HttpOnly·용도에 맞는 SameSite 설정을 적용하고 서버에서 만료·취소를 검증한다. URL에 인증 세션 ID를 넣으면 로그 등에 노출될 수 있어 피한다. OWASP Session Management.

Connections