쿠키는 서버에서 클라이언트에 데이터를 저장하는 방법중 하나입니다.
데이터는 특정 조건(쿠키 옵션)들이 만족해야 이용할 수 있습니다.
쿠키 옵션에서 도메인은 포트 및 서브 도메인 정보, 세부경로를 포함하지 않습니다.
쿠키 옵션에 도메인 정보가 있다면, 클라이언트의 쿠키 옵션과 서버의 도메인이 일치해야만 쿠키를 전송할 수 있습니다.
세부 경로는 서버가 라우팅할 때 사용하는 경로입니다.
프로토콜://서브도메인.도메인.루트도메인:포트/세부경로
Path가 /users로 설정 되어 있고, 요청하는 세부 경로가 /users/login 인 경우라면 쿠키 전송이 가능합니다.
쿠키가 유효한 기간을 정하는 옵션입니다.
Maxage는 초 단위 유효시간을 설정.
Expires는 날짜 단위 유효기간을 설정.
두 옵션이 모두 지정되지 않는 경우에 브라우저의 탭을 닫아야만 쿠키가 제거될 수 있습니다.
사용하는 프로토콜이 보안 유무를 확인합니다.
해당 옵션이 true로 설정된 경우, HTTPS 프로토콜일 경우 전송할 수 있습니다.
자바스크립트에서 브라우저의 쿠키에 접근 여부를 결정합니다.
해당 옵션이 true로 설정된 경우, 자바스크립트에서 쿠키 접근이 불가능합니다.
기본값은 false이며, JS로 인한 XSS 공격에 취약합니다.
Cross-Origin 요청을 받은 경우, 요청에서 사용한 메소드와 해당 옵션의 조합으로 서버의 쿠키 전송 여부를 결정하게 됩니다.
same-site : 요청을 보낸 Origin과 서버의 도메인이 같은 경우를 말합니다.
이러한 옵션들을 지정하고 서버에서 클라이언트로 쿠키가 처음 전송되면 헤더에 Set-Cookie 라는 property에 쿠키를 담아 보냅니다.
이후 쿠키 전송은 헤더에 Cookie 라는 property에 담아 보냅니다.
서버는 클라이언트에 인증정보를 담은 쿠키를 전송하고, 클라이언트는 전달받은 쿠키를 요청과 같이 전송하여 Stateless 특성에도 연결을 Stateful 하게 유지할 수 있습니다.
하지만, 자바스크립트를 이용한 쿠키접근이 가능하므로 민감한 정보를 담는 것은 위험합니다.