[HTTP 쿠키란]
- HTTP 무상태성(stateless) : 이전 통신 정보를 현재 통신에서는 모름
- 서버가 클라이언트(브라우저)에 전송하는 데이터 조각
- 브라우저는 데이터 조각을 저장하고 동일한 서버로 요청 시 전달함
- 사용 예시 : 사용자의 정보(로그인 정보 말고)가 저장된 쿠키를 브라우저에 전달하고, 요청 시 쿠키를 받아 동일한 웹브라우저인지 확인 후 처리
=> 로그인 정보는 세션을 사용함, 쿠키에 저장하고 아무리 보안 처리를해도…. 위험
[node cookie module : cookie-parser + express res.cookie]
- cookie-parser : 쿠키 헤더를 파싱해서 req.cookies 객체 리턴
- res.cookie(name, value) : 응답 헤더에 쿠키를 설정하는 메서드, value는 문자열 또는 JSON
- 서버에서 클라이언트로 보낼 쿠키 옵션값 포함
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });
1) expires : 전송된 쿠키 보증 기간(+ 해당 브라우저의 모든 탭이 닫기거나 새로운 브라우저를 켜면 전혀 쿠키와 상관없음), 세션 쿠키 사용 시 설정할 것을 권장
2) httpOnly : 웹서버에서만 쿠키에 접근할 수 있도록 쿠키에 플래그 지정
2) httpOnly : 웹서버에서만 쿠키에 접근할 수 있도록 쿠키에 플래그 지정
등등 더 있음, express api 문서 보기
[HTTP 쿠키 사용하기]
- http://호스트/ 요청 시 count 값이 올라가도록 : 동일 브라우저에서
1) express 서버 구현 : express, cookie-parser 인스톨
const express = require(‘express’);
const cookieParser = require(‘cookie-parser’);
const app = express();
const port = 3000;
app.use(cookieParser());
app.get(‘/‘, (req, res) => {
});
app.listen(port, () => {
console.log(‘server is running’);
});
2) 브라우저에 보낼 쿠키 정보 작성
app.get(‘/‘, (req, res) => {
let count = 0;
res.cookie(‘count’, count);
res.send(`Cookie : ${count}`);
});
3) 브라우저에서 서버로부터 받은 쿠키 조회 : document.cookie
- 문자열로 저장 : console.dir(document.cookie); // “count=0”
4) ‘/‘ URI 요청 시 카운트 올라가도록 고치기
app.get(‘/‘, (req, res) => {
let count;
if(req.cookies.count){
count = parseInt(req.cookies.count, 10) + 1;
} else {
count = 0;
}
res.cookie(‘count’, count);
res,send(`Cookie : ${count}`);
});/code>
5) 정리
- HTTP 무상태 : 이전 통신 내용을 모름
- 쿠키에 정보를 담아 클라이언트로 전달해서 클라이언트에서 요청을 할 때 header에 cookie 정보가 있고 요청하면 서버가 쿠키를 받음
- header 정보를 보면 cookie 값이 전부보임
1) key값을 지정하고 서버가 클라이언트로 쿠키를 보낼 때 해시화해서 보낼 수 있음
2) 쿠키에 서명을 해서 변조로 인해 발생할 문제 방지하기 : 클라이언트에 의해 쿠키가 변조되면 감지할 수 있음, 헤더에서 보이는 쿠키값 해시화하기
=> cookie-parser 미들웨어 사용할 때
[HTTP 쿠키 서명하기]
1) 쿠키 key 설정하기
app.use(cookieParser(‘key값 입력’)
- 아무런 값을 입력하기 : 해시화 key로 사용됨
2) 서버에서 보내는 쿠키 해시화 설정하기
res.cookie(‘count’, count, { signed: true });
3) 클라이언트로부터 받는 쿠키 헤더 파싱
count = parseInt(req.signedCookies.count, 10) + 1;
4) 헤더 확인하기
[더하기]
- 세션
[참고자료]
- MDN, HTTP 쿠키 : https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
- express, res.cookie : http://expressjs.com/ko/4x/api.html#res
- gitHub, cookie-parser : https://github.com/expressjs/cookie-parser
'nodejs' 카테고리의 다른 글
[node.js] express - 라우터, 컨트롤러 나누기 (1) | 2017.06.20 |
---|---|
[node.js] express - session : 로그인 (0) | 2017.06.19 |
[node.js] AJAX API 서버 만들기 (0) | 2017.06.17 |
[node.js] 유저 목록 조회, 유저 조회, 삭제 테스트 + API 서버 구현 (0) | 2017.06.16 |
[node.js] TDD 라이브러리 - mocha, assert, should, supertest (0) | 2017.06.12 |
댓글