세션

세션(Session)은 사용자가 웹 사이트에 접속한 이후 복수의 페이지를 둘러보며 취한 일련의 행동을 하나의 단위로 묶은 것이다. HTTP는 본래 상태가 없는(stateless) 프로토콜이기 때문에, 사용자의 연속적인 행동을 하나의 흐름으로 인식하려면 세션이 필요하다.

왜 세션이 필요한가

  • HTTP 자체는 요청 하나하나가 독립적이다.
  • 그러나 로그인, 장바구니, 진행 중인 결제 등은 상태가 유지되어야 한다.
  • 세션은 서버가 사용자를 기억하기 위한 장치다.

동작 방식 (전통적 세션)

  1. 사용자가 처음 접속하면 서버가 고유한 세션 ID를 발급한다.
  2. 세션 ID를 쿠키 또는 URL 파라미터로 클라이언트에 전달한다.
  3. 이후 요청마다 클라이언트가 세션 ID를 함께 보낸다.
  4. 서버는 세션 저장소(메모리, Redis 등)에서 ID에 해당하는 사용자 상태를 찾아 응답한다.

세션 vs 쿠키

항목세션쿠키
저장 위치서버클라이언트
보안상대적으로 안전탈취 위험 있음
용량서버 자원만큼한정적 (~4KB)
만료서버 정책클라이언트 측 정책

세션 ID 자체는 보통 쿠키로 전달되므로, 둘은 대립이 아니라 역할 분담 관계다.

분석에서의 세션

웹 분석 도구(GA 등)에서의 세션은 의미가 조금 다르다. 보통 30분간 활동이 없으면 세션 종료로 간주하고, 같은 사용자라도 새 세션을 부여한다. KPI 측정에서 “세션 수”, “세션당 페이지뷰” 등으로 사용된다.

보안 이슈

  • 세션 하이재킹: 세션 ID 탈취로 다른 사용자 행세
  • 세션 픽세이션: 공격자가 정한 세션 ID를 피해자에게 사용시킴
  • 대응: HTTPS, HttpOnly 쿠키, 짧은 만료, 로그인 시 세션 ID 재발급

관련 노트