로그인 한 후 새로고침(새로운 요청)을 할 때마다 초기화된다면? 그래서 로그아웃 된다면? 계속해서 아이디와 비밀번호를 쳐야할 것이다. 그런데 현재 우리가 사용하는 웹사이트에서 그렇지않은 이유는 클라이언트가 서버에게 사용자(내)가 누구인지 지속적으로 알려주기 때문이고, 새로운 요청을 하고 응답을 할 때 서버는 쿠키라는 것을 같이 보내 준다.
정리하면, 새로운 요청/응답이 오갈때마다 사용자(내)가 누구인지 지속적으로 기억하는 방법은
처음에 서버는 클라이언트에게 요청자(사용자)를 추적할 만한 정보를 쿠키로 만들어서 브라우저로 보내고 (우리가 코딩해야함)
그 다음부터는 웹 브라우전는 쿠키를 저장해두었다가 요청할 때마다 쿠키를 동봉해서 보내준다. (브라우저는 쿠키가 있을 경우 자동으로 동봉해서 보내주므로 우리가 코딩하지 않음)
예전에 HTTP에 대해 배울 때 요청(Request)와 응답(Response) 구성에 대해 정리해보았다. 요청과 응답은 header와 body가 있는데 body는 실제 주고 받는 데이터, header는 데이터에 대한 데이터를 저장한다. 쿠키도 실제 데이터라기보다 부과적인 데이터이기 때문에 header에 저장되어 있다.
그래서 요청시 쿠키가 들어있는 곳은 request.headers.cookie이고, 응답에 쿠키를 기록할 때는 response.writeHead 메서드를 사용한다.
3. 쿠키 생성(구현)
앞에서 살펴보았던
<<정리하면, 새로운 요청/응답이 오갈때마다 사용자(내)가 누구인지 지속적으로 기억하는 방법은
1. 처음에 서버는 클라이언트에게 요청자(사용자)를 추적할 만한 정보를 쿠키로 만들어서 브라우저로 보내고 (우리가 코딩해야함)
2. 그 다음부터는 웹 브라우전는 쿠키를 저장해두었다가 요청할 때마다 쿠키를 동봉해서 보내준다. (브라우저는 쿠키가 있을 경우 자동으로 동봉해서 보내주므로 우리가 코딩하지 않음)
3. 그러면 서버는 요청에 들어있는 쿠키를 읽어서 사용자가 누군지 파악한다.>>이 부분에서
=>처음에 서버의 응답과 합께 사용자의 브라우저에 쿠키를 심는것을 구현해야 한다.이 때에는set-cookie가 사용되며 이는 '브라우저야~ 다음과 같은 값의 쿠키를 저장해!라는 의미'이다.
'Node.js 교과서 - 조현영 지음' 에서 set-cookie과 다양한 옵션들에 대해 잘 나와있었다. 이를 바탕으로 정리해보면,,
쿠키명 = [쿠키값]: 기본적인 쿠키의 값이다.'Set-Cookie':`login='Grace Chung'` 과 같이 설정 할 수 있다.
Expires = [날짜]: 만료 기한이다. 이 기한이 지나면 쿠키가 제거된다. 기본값은 클라이언트가 종료 될 때 까지이다.
Max-age = [초]: Expires와 비슷하지만 날짜 대신 초를 입력할 수 있다. Expires보다 우선되며 해당 시간이 지나면 쿠키가 제거된다.
Domine = [도메인명]: 쿠키가 전송될 도메인을 특정할 수 있다. 기본값은 현재 도메인이다.
Path = [URL]: 쿠키가 전송될 도메인을 측정할 수 있다. 기본값은 '/'이고, 이 경우 모든 URL에서 쿠키를 전송할 수 있다.
Secure: HTTPS 일 때만 쿠키가 전송된다.
HttpOnly: 설정 시 자바스크립트에서 쿠키에 접근할 수 없다.쿠키(특히 로그인관련 쿠키)는 JavaScript로 접근가능하게 되면 보안이 위험하기때문에 설정한다.