쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터 파일로, 사용자의 상태를 유지하는 데 사용된다.
Set-Cookie 헤더를 통해 쿠키를 생성.Cookie 헤더에 포함하여 서버로 전송됨.HTTP/1.1 200 OK
Set-Cookie: user=alice; Expires=Wed, 01 Mar 2025 12:00:00 GMT; HttpOnly
GET /dashboard HTTP/1.1
Host: example.com
Cookie: user=alice
| 속성 | 설명 |
|---|---|
Expires | 만료 날짜 설정 (지정하지 않으면 세션 쿠키) |
Max-Age | 만료까지의 시간(초 단위) |
Domain | 쿠키가 적용될 도메인 지정 |
Path | 쿠키가 적용될 경로 지정 |
Secure | HTTPS에서만 전송됨 |
HttpOnly | JavaScript에서 접근 불가능 (XSS 공격 방지) |
SameSite | 크로스 사이트 요청 제한 (Strict, Lax, None) |
Set-Cookie: session_id=xyz123; HttpOnly; Secure; SameSite=Strict
세션은 서버에서 관리하는 사용자 상태 정보로, 쿠키보다 보안성이 높다.
HTTP/1.1 200 OK
Set-Cookie: session_id=xyz123; HttpOnly; Secure
GET /dashboard HTTP/1.1
Host: example.com
Cookie: session_id=xyz123
| 저장 방식 | 설명 |
|---|---|
| 메모리(RAM) | 속도가 빠르지만 서버 재시작 시 세션 정보 유실 |
| 파일 시스템 | 서버의 특정 디렉토리에 저장 (ex: PHP의 /tmp/sess_*) |
| 데이터베이스(DB) | MySQL, Redis 등에 저장하여 확장성 및 유지보수 용이 |
| Redis / Memcached | 속도가 빠른 인메모리 데이터 저장소 활용 |
| 비교 항목 | 쿠키 | 세션 |
|---|---|---|
| 저장 위치 | 클라이언트(브라우저) | 서버 |
| 보안 | 낮음 (위변조 가능) | 높음 (서버 관리) |
| 속도 | 빠름 | 상대적으로 느림 |
| 유지 기간 | 사용자가 설정 가능 | 서버 설정에 따라 만료됨 |
| 사용 목적 | 간단한 데이터 저장 (예: 다크 모드, 자동 로그인) | 로그인 및 사용자 인증 관리 |
쿠키는 가벼운 데이터 저장, 세션은 보안이 필요한 정보 유지에 적합!
Secure 속성을 설정하여 암호화된 통신 보장.HttpOnly 속성을 추가하여 JavaScript 접근 차단.session_regenerate_id()를 호출하여 새로운 세션 ID 할당.