쿠키 보내기
웹 사이트 방문자에게 쿠키를 보내봅시다.
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'이라는 비밀키로 서명되었던 쿠키들은 모두 무효화됩니다.
'웹 프로그래밍' 카테고리의 다른 글
[JS] 로그인 상태 유지 (2) | 2023.12.01 |
---|---|
[Yelpcamp 프로젝트] flash (0) | 2023.11.29 |
[Express] 세션 (0) | 2023.11.17 |
[Express] 라우터 (0) | 2023.11.17 |
[Yelpcamp 프로젝트] 리뷰 기능 추가하기 (1) | 2023.11.16 |