세션은 쿠키를 기반으로 되어 있지만, 사용자 정보들을 브라우저에 저장하는 쿠키와는 다르게, 서버 측으로 저장하고 관리한다.
클라이언트가 서버에 접속해서 브라우저를 종료 할 때까지 인증상태를 유지한다. 즉, 세션ID를 통해 서로 관련된 요청을 묶어주는 역할을 한다.
- 종료하게 되면 세션 삭제
사용자의 정보 파일을 서버가 직접 관리 한다.
서버에서 클라이언트 구분을 위해 세션 ID를 부여한다.
클라이언트가 서버에 접속 시 세션 ID를 발급 받음
클라이언트가 무슨무슨 사이트를 접속 할 때
무슨무슨 사이트에서 발급해주는 ID를 통해 들어올 수 있다.
클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있다.
클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
클라이언트가 들어가고 싶은 페이지가 있으면 서버한테 발급받은 ID와 같이 전달하고 요청해야 한다.
서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라언트 정보를 가져와서 사용
클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답
클라이언트가 요청한 정보를 가지고 서버에서 처리 이후 클라이언트에게 전달 한다.
보안성이 높다.
세션은 서버에 저장되고 관리 하기 때문에, 외부에서 접근하기 어렵다. 그렇기 때문에
클라이언트의 변경이 어렵고, 세션이 만료 되면 클라이언트에서 자동으로 삭제(제거) 된다.
용량 제한이 없다.
세션은 서버에 저장 할 수 있어 용량 제한이 없다.
다양한 데이터 타입을 저장 할 수 있다.
세션은 복잡한 데이터 타입도 저장이 가능하며, 다양한 데이터 타입(Object)으로 저장할 수 있다.
서버의 부하가 증가한다.
세션은 서버에 저장 되기 때문에 많은 세션이 생성되면 서버의 메모리나 디스크의 공간이 부족 해질 수 있어 속도가 느려질 수 있다.
확장 성이 떨어진다.
세션 ID를 클라이언트에게 전달 해야 하므로 쿠키나 URL에 추가적인 데이터를 붙여야 한다. 이는 악의 적인 공격에 취약 할 수 있다.
분산 환경에서 관리하기 어렵다.
여러 대의 서버가 하나의 웹 서비스를 제공하는 경우, 각 서버마다 세션 정보를 동기화 해야 한다. 그렇기 때문에 복잡한 로직 과 추가로 비용이 발생 한다.