쿠키는 브라우저에 저장된 작은 텍스트 조각이다.
앞서 살펴 본 것과 같이 누구나 쿠키를 열람하거나 조작할 수 있기 때문에 민감한 아이디나 비밀번호와 같이 민감한 개인 정보를 저장하면 안된다. 누가 탈취하더라도 문제 없 데이터를 저장해 둔다. 예를 들어, 테마 설정이나 해당 도메인에서 개인적인 환경 세팅이 있을 수 있다.
벨로그와 같이 블로그에서 해당 게시물 계정 주인만이 이전 게시글을 삭제하거나 수정할 수 있다. 게시글과 계정 주인을 판별하기 위해서 “로그인”을 해야 한다. 만약 여러 게시글을 수정해야 한다고 매번 로그인을 요구하면 매우 매우 불편할 것 이다. “세션”을 이용하면 한 번만 로그인하면 브라우저를 끄기 전 까지 로그인 요구하지 않을 수 있다.
브라우저에서 암호화된 세션 아이디로 존재하고, 서버에서 해당 세션 아이디를 인증할 수 있는 세션 정보가 존재한다. 세션은 쿠키를 통해 전달된다.
클라이언트의 로그인 시도가 성공한다.
서버에서 세션id를 발급하여 브라우저에 전달하고, 세션 정보는 서버 메모리에 저장한다.
브라우저는 동일한 서버에 접속 할 때마다 쿠키에 세션 id를 포함하여 서버에 전달한다.
서버에서 세션 id와 서버에 존재하는 세션 정보를 서로 비교하여 응답한다.
<이미지 출처 : https://surprisecomputer.tistory.com/36>
JWT는 토큰 기반 인증 방식이기 때문에 클라이언트에서 인증에 필요한 정보를 모두 소유하고 있다. 서버의 메모리에 세션 정보를 저장해야 하는 세션과 달리, JWT는 서버에서 저장해야할 데이터가 없다. 세션 데이터가 서버 메모리에 있기 때문에 세션이 필요없어지거나 무효화해야 할 때 서버 측에서 통제할 수 있다. 반면, JWT는 유효기간이 지나기 전까지 서버 측에서 통제할 수 없다.