cookie 1 – intro
cookie 2 – counter
https://expressjs.com/en/4x/api.html
https://www.npmjs.com/package/cookie-parser
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get('/count', function(req, res){
if (req.cookies.count){
var count = parseInt(req.cookies.count);
} else{
var count = 0;
}
count = count + 1;
res.cookie('count', count);
res.send('count : ' + count);
})
app.listen(3003, function(){
console.log('Connected 3003 port!!!');
});
cookie-parser 를 설치해서 cookie를 이용할 수 있다. app.use(cookieParser()); 에서 ()를 빼먹었는데, 코드는 또 잘 돌아가는데 접속이 안되서 한참 헤맸다..ㅋㅋ.. 아니 포트도 잘 열려있는데 접속이 안되니까.. 이런 삽질은 그만할 때도 되지 않았나ㅠ 쉽지 않네..
cookie 3 - 쇼핑카트 1, 2, 3
'/products' 에서 상품의 목록을 확인할 수 있고, 해당하는 상품을 클릭하면 클릭한 count만큼 장바구니에 숫자가 표시되는 프로그램.
쿠키에 cart 객체를 저장.
cart = {
1 : 1 //1번 상품의 장바구니 안에 담긴 갯수가 1개..
2 : 1
}
var products = {
1: {title: 'The history of web 1'},
2: {title: 'The next web'}
}; //db 대용
app.get('/products', function(req,res){
var output = '';
for (var name in products){
output += `
<li>
<a href="/cart/${name}">${products[name].title}
</li>`
}
res.send(`<h1>Poducts</h1><ul>${output}</ul>
<a href="/cart">Cart</a>`)
})
app.get('/cart/:id', function(req, res){
var id = req.params.id;
if (req.cookies.cart){
var cart = req.cookies.cart;
} else{
var cart = {};
}
if (!cart[id]){
cart[id] = 0;
}
cart[id] = parseInt(cart[id]) + 1;
res.cookie('cart', cart);
res.redirect('/cart');
})
app.get('/cart', function(req, res){
cart = req.cookies.cart;
if(!cart){
res.send('Empty!');
} else{
var output = '';
for (var id in cart){
output += `<li>${products[id].title} (${cart[id]})</li>`
}
res.send(`
<h1>Cart</h1>
<ul>${output}</ul>
<a href='/products'>Products</a>
`)
}
})
cookie 6 - cookie & 보안
지금까지 만든 쿠키는 다른 사람이 접근이 가능하기 때문에 보안에 취약. -> https 방식으로 통신하는 것이 좋음.
cookieParser에 인자를 주면 해당 값을 Key값으로 암호화해서 쿠키에 저장하고, request를 보내줄 때도 암호화된 형태로 보내주면 서버에서 Key값을 이용해서 암호화된 쿠기값을 원래의 값으로 해석할 수 있음.
app.use(cookieParser('dkagh1886')); //인자로 준 값이 Key가 됨. 암호화
app.get('/count', function(req, res){
if (req.signedCookies.count){
var count = parseInt(req.signedCookies.count);
} else{
var count = 0;
}
count = count + 1;
res.cookie('count', count, {signed:true});
res.send('count : ' + count);
})
signedCookies를 이용해서 암호화된 쿠키 생성 + 읽기 가능.
로그인 기능도 쿠키로 구현은 가능 -> 쿠키 값을 보고 해당하는 id와 password를 가지면 로그인되었다고 간주
But 아무리 암호화, https를 이용해도 어떤 문제가 발생할 지 예측이 어렵고, 노출될 경우 심각한 문제가 발생할 수 있기 때문에 id와 비밀번호와 같이 보안이 중요한 정보는 쿠키에 절대로 저장하지 않는다.