본문 바로가기
nodejs

[node.js] express - HTTP 쿠키 사용하기

by jinbro 2017. 6. 18.

[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 : 웹서버에서만 쿠키에 접근할 수 있도록 쿠키에 플래그 지정
등등 더 있음, 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) 헤더 확인하기




[더하기]
- 세션


[참고자료]



댓글