내가 만든 쿠키~~~
http header 에 담기지~!
인터넷에서 자주 보이는 쿠키!
쿠키의 개념은 아래와 같습니다.
서버에서 클라이언트에 영속성있는 데이터를 저장하는 방법
서버는 클라이언트의 쿠키를 이용
해서 데이터를 가져올 수 있습니다.
쿠키를 이용하는 것은 단순히 서버에서 클라이언트에 쿠키를 전송하는 것만 의미하는것이 아니라, 서버로 쿠키를 다시 전송하는 과정을 포함합니다.
서버는 쿠키를 이용해서 데이터를 저장할 수 있지만, 저장한 이후에는 아무때나 데이터를 가져올 수 없습니다.
특정조건
이 만족되어야 가져올 수 있답니다.
조건의 종류들은 http헤더를 사용해서 쿠키옵션
으로 표현해줍니다.
'Set-Cookie':[
'cookie=yummy',
'Secure=Secure; Secure',
'HttpOnly=HttpOnly; HttpOnly',
'Path=Path; Path=/cookie',
'Doamin=Domain; Domain=codestates.com'
]
도메인은 www.naver.com과 같은 서버에 접속할 수 있는 이름
입니다.
www.naver.com 에서 정확히 도메인은 naver.com
이 됩니다.
쿠키 옵션에서 도메인의 정보가 존재한다면, 클라이언트에서는 쿠키의 도메인 옵션과 서버의 도메인이 일치해야 쿠키를 전송할 수 있습니다.
'경로'란 뜻이죠!
만약 url이 'www.naver.com/users/login'이라면, 세부경로는 /users/login이 됩니다.
path의 옵션은 설정된 경로를 포함하는 하위 경로로 요청을 하더라도 쿠키를 서버에 전송할 수 있습니다.
쿠키가 유효한 기간을 정하는 옵션입니다.
MaxAge
는 쿠키가 유효한 시간을 초 단위로 설정하는 옵션입니다. 마치 쿠키에게 시한부 옵션
을 주는 것과 비슷하다고 볼 수 있습니다.
Expires
는 MaxAge와 비슷하지만 언제까지 쿠키가 유효한지 심판의 날을 지정
할 수 있습니다. 이때 옵션의 값은 클라이언트의 시간을 기준으로 합니다. 이후 지정된 시간, 날짜를 초과하게 되면 쿠키는 자동으로 파괴됩니다.
쿠키는 위 옵션의 여부에 따라 세션 쿠키(Session Cookie)와 영속성 쿠키(Persistent Cookie)로 나눠집니다.
세션 쿠키
: MaxAge 또는 Expires 옵션이 없는 쿠키로, 브라우저가 실행 중
일 때 사용할 수 있는 임시 쿠키
입니다. 브라우저를 종료하면 해당 쿠키는 삭제
됩니다.
영속성 쿠키
: 브라우저의 종료 여부와 상관없이
MaxAge 또는 Expires에 지정된 유효시간만큼 사용가능한 쿠키입니다.
사용하는 프로토콜에 따른 쿠키의 전송 여부를 결정하는 옵션입니다. 만약 Secure 옵션이 true로 설정된 경우 HTTPS를 이용하는 경우에만 쿠키를 전송
할 수 있습니다.
Secure 옵션이 없다면 프로토콜에 상관없이 http또는 https에 모두 쿠키를 전송할 수 있습니다.
단, 도메인이 localhost 인 경우에는 HTTPS가 아니여도 쿠키 전송이 가능합니다. 개발 단계에서는 localhost를 사용하는 경우가 많기 때문에 생긴 예외입니다.
자바스크립트로 브라우저의 쿠키에 접근이 가능한지 여부를 결정합니다. 만약 해당 옵션이 true로 설정
된 경우, 자바스크립트로 쿠키에 접근이 불가
합니다.
옵션을 명시하지 않는 경우에는 기본적으로 false로 지정
됩니다. 만약 이 옵션이 false인 경우
document.cookie를 이용해 자바스크립트로 쿠키에 접근할 수 있으므로 쿠키가 탈취될 위험
이 있습니다.
Cross-Origin 요청을 받은 경우, 요청에서 사용한 메소드(e.g. GET, POST, PUT, PATCH …)와 해당 옵션의 조합을 기준으로 서버의 쿠키 전송 여부를 결정하게 됩니다. 사용 가능한 옵션은 다음과 같습니다.
사용자가 인증에 성공한 상태를 말합니다.
세션아이디
도 만들어지는데, 보통 세션 성공을 증명할 때 이러한 세션아이디를 사용합니다.그리고!
웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용하게 됩니다.
쿠키를 통해서 유효한 세션 아이디가 서버에 전달되고,
세션 스토어에 해당 세션이 존재한다면,
서버는 해당 요청에 접근이 가능하다고 판단합니다.
하지만 쿠키에 세션 아이디가 없을 때, 서버는 해당 요청이 인증되지 않았음을 알려줍니다.
그렇다면 로그아웃은 어떻게 구현할까요?
- 클라이언트가 쿠키를 갱신하거나 삭제한다.
- 서버가 세션정보를 삭제한다.
위 두가지가 모두 구현되어야 합니다.
로그아웃 버튼을 눌렀을때, 클라이언트는 쿠키를 갱신하거나 삭제한 후에,
서버에서 세션정보를 삭제하고, 클라이언트는 상태 끌어올리기를 통해서 로그아웃된 화면을 보여줍니다.
클라이언트에서 세션 정보를 없애기 위해서는
- res.cookie로 쿠키의 값을 무효한 값으로 갱신
- res.clearCookie로 쿠키를 삭제
하는 방법이 있습니다.