쿠키와 세션에 대해서 이해를 하기 위해서는 HTTP 통신의 특징에 대해서 알고 있어야한다.
HTTP 특징에서 비연결성 (Connectionless) 와 무상태 (Stateless)가 있는데,
이러한 특징들로 인해서 서버는 항상 클라이언트가 누군지 확인을 해야한다.
예를 들어서 쿠키와 세션 없이 velog 에 로그인을 한다고하면, 페이지에 접속할때마다 항상 로그인을 해줘야 하는 것이다.
이러한 특징들을 보완하기 위해서 쿠키와 세션이 도입 되었다.
쿠키는 클라이언트쪽 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
사용자 인증이 유효한 기간을 명시할 수 있고, 유효시간 내에서는 브라우저가 종료되어도 인증이 유지 된다는 특징이 있다.
쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.
클라이언트 쪽에서 300개 이내의 쿠키를 가질 수 있고, 하나의 도메인당 20개의 쿠키, 하나의 쿠키값은 4KB 까지 저장한다.
응답 헤더에서 Set-cookie 속성을 사용하면 클라이언트쪽에 쿠키를 만들 수 있다.
쿠키는 사용자가 따로 요청하지 않아도 브라우저가 요청시에 요청헤더를 넣어서 자동으로 서버에 전달한다.
이름 : 각각의 쿠키를 구별하는데 사용되는 이름
쿠키명 = 쿠키값 : 쿠키 이름과 관련된 값
Expires = 날짜 : 쿠키의 유효시간
Max-age= 초 : Expires 와 비슷하지만 날짜 대신 초를 입력할 수 있다. 해당 초가 지나면 쿠키가 제거된다. Expires 보다 우선시 한다.
Domain = 도메인명 : 쿠키를 전송할 도메인
Path = URL : 쿠키를 전송할 경로
Secure : HTTPS 일 경우에만 쿠키가 전송 된다.
HttpOnly : 설정 시 자바스크립트에서 쿠키에 접근할 수 없다. 쿠키 조작을 방지 하기위해 설정하는 것이 좋다.
singed = cookie가 서명되어야 할 지를 결정한다.
클라이언트가 페이지를 요청
서버에서 쿠키를 생성
HTTP 헤더에 쿠키를 포함 시켜 응답
브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
쇼핑몰의 장바구니 기능
자동로그인, 팝업에서 "오늘 더 이상 이 창을 보지 않음" 체크, 쇼핑몰의 장바구니
세션은 쿠키를 기반으로 하고 있지만, 쿠키와 다르게 정보 파일들을 서버쪽에서 관리한다.
서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.
접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능 한다.
사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다.
동시 접속자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하를 일으킨다.
클라이언트가 요청 보내면, 해당 서버가 클라이언트에게 유일한 ID를 부여하는 데 이것이 세션 ID이다.
클라이언트가 서버에 접속 시 세션 ID를 발급 받음
클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
클라리언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라이언트 정보를 가져와서 사용
클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답
각 클라이언트에게 고유 ID를 부여
세션 ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스를 제공
보안 면에서 쿠키보다 우수
사용자가 많아질수록 서버 메모리를 많이 차지하게 됨
로그인 하고 브라우저창을 닫을때까지