기존에 쿠키와 세션에 대해 아는 것이라고는
쿠키는 클라이언트가 저장하는 정보, 세션은 서버가 저장하는 정보
라는 느낌정도로만 알고 있었다.
이번에 쿠키와 세션을 다시 접하면서 정리해보려고 한다.
브라우저가 서버로부터 응답으로 Set-Cookie 헤더를 받은 경우 해당 데이터를 저장한 뒤 모든 요청에 포함하여 보낸다.
naver.com
과 같은 웹 사이트를 방문할 때마다 이전에 방문했던 정보를 기억하는 데이터 파일이다.userId=user-1321;userName=sparta
와 같이 문자열 형식으로 존재하며 쿠키 간에는 세미콜론(;)
으로 구분된다.서버가 클라이언트의 HTTP 요청(Request)을 수신할 때, 서버는 응답(Response)과 함께 Set-Cookie 라는 헤더를 함께 전송할 수 있다.
그 후 쿠키는 해당 서버에 의해 만들어진 응답(Response)과 함께 Cookie HTTP 헤더안에 포함되어 전달받는다.
쿠키를 기반으로 구성된 기술이다.
단, 클라이언트가 마음대로 데이터를 확인 할 수 있던 쿠키와는 다르게
세션은 데이터를 서버에만 저장한다.
쿠키의 경우 서버를 재시작하거나 새로고침을 하더라도 로그인이 유지된다. 이는 사용자에게는 편리하지만, 서버의 입장에서는 보안 문제가 발생할 수 있다.
쿠키가 조작되거나 노출된다면 해당 권한을 탈취당해, 악의적인 공격을 받을 수 있게 되는 것이다.
그렇다면, 쿠키에는 어떤 정보를 담아야 할까?
바로, 사용자가 누구인지 확실하게 구분할 수 있는 정보를 넣어주어야 할 것이다.
그래야 민감한 정보는 서버에서만 관리하고, 사용자 식별 정보를 통해 사용자의 정보를 반환할 수 있게 되기 때문이다.
그래서 세션에서는 예시로 들자면,
쿠키에 사용자 정보를 저장할 때 사용자 정보는 서버에 저장
해 두고,
사용자를 구분할 수 있는 정보(쿠키의 시간 정보 등)
를 이용하여 쿠키에 저장해둔다.
그러면 세션에 저장된 정보를 불러오려 할 때 쿠키에 들어있는 사용자의 정보를 받아서
이를 기준으로 세션에 저장된 정보를 찾아 보내주는 방식인 것이다.
쿠키와 세션이 무엇인지, 그리고 이들의 작동 방식을 이해했다.