Session은 쿠키의 보안 취약성을 보완하기 위해 등장했다.
쿠키는 데이터를 클라이언트에 저장한다면, Session은 데이터를 서버에 저장한다.
쿠키에는 세션의 key만을 두기 때문에 한결 더 보안이 강화된다.
어떻게든 세션을 저장해두어야 하기 때문에 메모리를 사용하며, 서버 성능 이슈를 발생시킬 수 있다.
로그인
로그인 시, 사용자가 정확한 아이디와 비밀번호를 입력했다면 서버는 인증(Authentication)에 성공했다고 판단할 것이다.
그리고 다음 번에 인증을 필요로 하는 작업을 할 때에는 동일한 인증 작업을 굳이 다시 할 필요가 없을 것이다.
다시 말해, '인증에 성공했음'을 서버가 알고 있다면 매번 로그인할 필요가 없게 해야 한다는 것 이다.
이러한 작업을 위해 필요한 것은 다음과 같다.
- 서버는 사용자가 인증에 성공했음을 알고 있어야 한다.
- 클라이언트는 인증 성공을 증명할 수단을 갖고 있어야 한다.
여기에서 사용자가 인증에 성공한 상태를 Session 이라고 부르며, 주로 in-memory 또는 세션 스토어를 활용해서 저장해둔다.
세션을 만들면 이를 구분하기 위해 세션 아이디도 만들어진다.
보통 클라이언트에 세션 성공을 증명하기 위해 세션 아이디를 전달한다.
쿠키를 통해 유효한 세션 아이디가 서버로 전달되고, 세션 스토어에 해당 세션이 존재한다면 서버는 해당 요청에 대해 접근 가능하다고 판단한다.
로그아웃
로그아웃은 다음 두 가지 작업을 통해 이루어진다.
- 서버의 세션 정보를 삭제한다.
- 클라이언트의 쿠키를 갱신한다.
서버가 클라이언트의 쿠키를 임의로 삭제할 수 없으므로, set-cookie를 통해 세션 아이디의 key 값을 무효한 값으로 갱신해주는 방식을 활용한다.
'Web > Security' 카테고리의 다른 글
OAuth 2.0 (0) | 2021.09.24 |
---|---|
Token (0) | 2021.09.24 |
Cookie (0) | 2021.09.24 |
HTTPS (0) | 2021.09.24 |