[JS] 쿠키
쿠키 보내기
웹 사이트 방문자에게 쿠키를 보내봅시다.
const colors = require('colors');
const express = require('express');
const app = express();
app.listen(3000, () => {
console.log('Listening on port 3000!'.yellow)
})
app.get('/setname', (req, res) => {
res.cookie('name', 'ganglim');
res.send('쿠키를 전송했습니다');
})
쿠키 parser 미들웨어
쿠키를 파싱하려면 cookie-parser라는 패키지를 설치해야 합니다.
cmd에서 npm i cookie-parser를 해줍니다.
아래 코드를 기존 코드에 추가합니다.
const cookieParser = require('cookie-parser');
app.use(cookieParser());
app.get('/greet', (req, res) => {
const { name = 'NoName' } = req.cookies;
res.send(`Welcome back, ${name}!`);
})
쿠키 서명하기
쿠키에 서명을 하면 쿠키의 조작 유무를 알 수 있습니다.
쿠키에 'ganglim'이라는 문자열(비밀키)로 서명을 합니다.
app.use(cookieParser('ganglim'));
app.get('/getsignedcookie', (req, res) => {
res.cookie('season', 'winter', { signed: true });
res.send('쿠키에 서명했습니다');
})
쿠키에 서명을 하면 쿠키 값에 이상한게 붙기는 하지만 값 사이에서 원래 값으로 설정했던 'winter'를 볼 수 있습니다. 쿠키에 서명을 하는 목적은 남들에게 숨기는 것이 아닙니다.
모든 쿠키들을 응답으로 보내봅시다.
app.get('/verifyseason', (req, res) => {
res.send(req.cookies);
})
모든 쿠키들을 응답으로 보내줬지만 서명된 쿠키인 season은 볼 수 없습니다. request.cookies 안에는 서명된 쿠키가 포함되지 않기 때문입니다. 그 이유는 서명된 쿠키와 일반적인 무서명 쿠키를 명확히 구분하기 위함입니다.
그럼 서명된 쿠키들을 응답으로 보내봅시다.
app.get('/verifyseason', (req, res) => {
// res.send(req.cookies);
res.send(req.signedCookies);
})
서명된 쿠키들이 정상적으로 보입니다.
이번에는 서명된 쿠키를 조작해봅시다.
'winter' 부분을 'summer'로 조작하면 'season'이 false로 바뀐 것을 볼 수 있습니다. 파서가 포맷을 보고 서명을 확인해야겠다고 결정합니다. 확인 결과 누군가가 이것을 변경했다는 것을 알아차려 false로 알려줍니다.
추가로, 현재 비밀키는 'ganglim'이지만 비밀키를 다른 것으로 변경하면 'ganglim'이라는 비밀키로 서명되었던 쿠키들은 모두 무효화됩니다.