모바일이나 웹서비스에서 가장 많이 쓰이는 통신 방식은 HTTP통신이다.
HTTP통신 2가지의 특성을 가지고 있다.
즉, 만약에 로그인을 하게 된다면 이전 상태 정보를 유지하지 않기 때문에 여러 서비스를 누를 때마다 이 사람이 로그인을 했는지 알 방법이 없다. 때문에 이동할 때마다 로그인을 다시 새로 해줘야한다.
이러한 문제점을 해결하려고 나온 것이 쿠키/세션/토큰 이다.
서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달한다. 그러면 브라우저는 앞으로 해당 쿠키를 지속해서 보내준다.
웹에서 HTTP요청으로 로그인 ID,PW를 보내면 서버에서 회원저장소에있는 회원 정보를 쿠키에 담아서 보내준다. 그러면 클라이언트 쿠키 저장소에 그 쿠키를 저장해뒀다가 앞으로 쿠키를 계속 사용해서 서버에 보내서 인증을 받는다.
쿠키를 사용해서 로그인Id를 전달해서 로그인을 유지할 수 있다.
그런데 여기에는 심각한 보안 문제가 있다.
쿠키에는 영속 쿠키와 세션 쿠키가 있다.
쿠키는 그럼 어디에 사용될까?
쿠키에 중요한 정보를 보관하는 방법은 여러가지 보안 이슈가 있다. 이러한 문제를 해결하려면 결국에 중요한 정보를 모두 서버에 저장해야한다. 그리고 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결해야 한다. 이렇게 서버에 중요한 정보를 보관하고 연결을 유지하는 방법을 세션이라 한다.
세션 동작 원리
사용자가 loginId,password 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인한다.
여기서 세션 ID를 생성하는데, 추정이 불가능해야 한다. UUID로 만들게되면 추정이 불가능 하다. 생성된 세션ID와 세션에 보관할 값(memberA)을 서버의 세션 저장소에 보관한다.
클라이언트와 서버는 결국 쿠키로 연결되어야 한다. 서버는 클라이언트에 mySessionId라는 이름으로 세션ID만 쿠키에 담아서 전달한다. 클라이언트는 쿠키 저장소에 mySessionId 쿠키를 보관한다. 클라이언트에서 이렇게 저장된 세션ID를 쿠키를 이용해서 서버로 요청을 보내면 서버는 쿠키에 담겨있는 세션ID와 세션 저장소에 있는 정보와 대조한 후 데이터를 가져온다
여기서 중요한 점,
세션 장점