세션(Session)은 일정 시간(방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 웹 브라우저를 종료하고 연결을 끝내는 시점)동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지하는 기술.
즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
세션은 HTTP 프로토콜의 특징을 보완하기 위해 사용한다.
서버-클라이언트 통신시 통신이 연속적으로 이어지지 않고(Connectionless), 상태 정보가 유지되지 않는(Stateless) HTTP 프로토콜 속성으로 인해 사용자 정보가 필요한 경우, 통신시 반복적으로 연결과 인증을 해야 한다.
그러나 세션을 사용하여 사용자 인증(로그인)이 완료된 상태를 유지함으로써 반복적으로 사용자 인증(로그인)을 해야 할 필요가 없어진다.
웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다. 서버 용량이 허용하는 한에서 저장 데이터에 제한은 없다. 세션 정보를 저장하는 장소는 서버 메모리일수도 있지만 다중 서버 환경에서는 외부 저장소를 사용한다.
접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않도록 설정할 수 있으나 브라우저가 종료되면 만료 기간에 상관없이 삭제된다.
각 클라이언트에게 고유 ID를 부여하고, 서버는 세션 ID로 클라이언트를 구분하여 클라이언트의 요구에 맞는 서비스를 제공한다.
세션은 서버에 저장되기 때문에 비교적 보안성이 좋으나 서버의 자원을 사용하기 때문에 서버의 자원에 한계가 있고 처리가 요구되어 비교적 속도가 느린 편이다.
# 세션 한계
1. 사용자가 많아질수록 서버의 메모리를 많이 차지하게 됨
2. 동접자 수가 많은 서버의 경우, 과부화로 인해 성능 저하의 요인이 됨
반면 쿠키는 클라이언트에 저장되기 때문에 변질의 위험 및 스니핑을 당할 우려가 있어 보안에 취약하나 서버 요청을 필요로 하지 않기 때문에 속도가 빠르다.
때문에 세션은 쿠키를 기반으로 동작한다. 사용자 정보는 클라이언트 측이 아닌 서버 측에서 관리하고, 클라이언트는 서버로부터 세션 정보를 찾기 위한 세션 ID만 전달받는다.
쿠키(Cookie) | 세션(Session) | |
---|---|---|
저장 위치 | 클라이언트 | 서버 |
저장 방식 | 하드 디스크 내 텍스트 파일 | 웹 컨테이너 내 객체 |
저장 형식 | Text | Object |
리소스 | 클라이언트 리소스 | 서버 리소스 |
용량 제한 | - 클라이언트 : 총 쿠키 300개 - 도메인 : 쿠키 20개 - 쿠키 : 4KB | 서버 허용 범위 내 (용량 제한 없음) |
만료 시점 | 만료 시점(Expires) 설정시 까지 미설정시 세션 종료시 까지 | 브라우저 종료시 유효 기간 설정 가능 |
처리 속도 | 빠름 | 느림 |
보안성 | 낮음 | 높음 |