세션
세션(Session)은 사용자가 웹 사이트에 접속한 이후 복수의 페이지를 둘러보며 취한 일련의 행동을 하나의 단위로 묶은 것이다. HTTP는 본래 상태가 없는(stateless) 프로토콜이기 때문에, 사용자의 연속적인 행동을 하나의 흐름으로 인식하려면 세션이 필요하다.
왜 세션이 필요한가
- HTTP 자체는 요청 하나하나가 독립적이다.
- 그러나 로그인, 장바구니, 진행 중인 결제 등은 상태가 유지되어야 한다.
- 세션은 서버가 사용자를 기억하기 위한 장치다.
동작 방식 (전통적 세션)
- 사용자가 처음 접속하면 서버가 고유한 세션 ID를 발급한다.
- 세션 ID를 쿠키 또는 URL 파라미터로 클라이언트에 전달한다.
- 이후 요청마다 클라이언트가 세션 ID를 함께 보낸다.
- 서버는 세션 저장소(메모리, Redis 등)에서 ID에 해당하는 사용자 상태를 찾아 응답한다.
세션 vs 쿠키
| 항목 | 세션 | 쿠키 |
|---|---|---|
| 저장 위치 | 서버 | 클라이언트 |
| 보안 | 상대적으로 안전 | 탈취 위험 있음 |
| 용량 | 서버 자원만큼 | 한정적 (~4KB) |
| 만료 | 서버 정책 | 클라이언트 측 정책 |
세션 ID 자체는 보통 쿠키로 전달되므로, 둘은 대립이 아니라 역할 분담 관계다.
분석에서의 세션
웹 분석 도구(GA 등)에서의 세션은 의미가 조금 다르다. 보통 30분간 활동이 없으면 세션 종료로 간주하고, 같은 사용자라도 새 세션을 부여한다. KPI 측정에서 “세션 수”, “세션당 페이지뷰” 등으로 사용된다.
보안 이슈
- 세션 하이재킹: 세션 ID 탈취로 다른 사용자 행세
- 세션 픽세이션: 공격자가 정한 세션 ID를 피해자에게 사용시킴
- 대응: HTTPS, HttpOnly 쿠키, 짧은 만료, 로그인 시 세션 ID 재발급
관련 노트
- Session: 영문 표기 노트
- CSRF: 세션과 결합된 대표적인 웹 취약점
- 크로스 사이트 스크립팅: 세션 탈취의 주요 경로
- 기밀성: 세션 정보 보호의 보안 원칙