- 로그인을 하면 (ID, Password 정보를 전달하면) 서버에서 해당 사용자가 맞는지 확인한다.
- 서버에는 세션 저장소가 있는데 만약 사용자 정보가 맞다면(로그인이 성공했다면)
- 세션 ID(추정 불가능한 값)를 생성해 회원 정보를 저장한다.
- 클라이언트와 서버는 결국 쿠키로 연결되어야 한다.
- 서버는 클라이언트에 mySessionId 라는 이름으로 세션 ID만 쿠키에 담아서 전달한다.
- 클라이언트는 쿠키 저장소에 mySessionId 쿠키를 보관한다.
- 회원과 관련된 정보는 클라이언트에 전달하지 않는다.
- 오직 추정 불가능한 세션 ID만 쿠키를 통해 클라이언트에 전달한다.
- 클라이언트는 요청시 항상 mySessionId 쿠키를 전달한다.
- 서버에서는 클라이언트가 전달한 mySessionId 쿠키 정보로 세션 저장소를 조회해서 로그인시 보관한 세션 정보를 사용한다.
- 세션을 사용해서 서버에서 중요한 정보를 관리하게 되었다. 덕분에 아래와 같은 보안 문제들을 해결할 수 있다.
- 쿠키 값을 변조 가능 -> 예상 불가능한 복잡한 세션ID를 사용한다.
- 쿠키에 보관하는 정보는 클라이언트 해킹시 털릴 가능성이 있다. -> 세션 ID가 털려도 여기에는 중요한 정보가 없다.
- 쿠키 탈취 후 사용 -> 해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 세션의 만료시간을 짧게 유지한다. 또는 해킹이 의심되는 경우 서버에서 해당 세션을 강제로 제거하면 된다.