세션 개요
쿠키는 많은 것을 저장할 수 없습니다. 브라우저의 쿠키 크기에는 제한이 있기 때문입니다. 또한, 쿠키는 서버 측에서 정보를 저장하는 것만큼 안전하지 않습니다. 그래서 세션이 필요합니다.
모든 데이터를 쿠키에 저장하지 않고 세션 id만 저장하였습니다. 하지만 서버에서는 그 쿠키만 있으면 해당하는 id의 모든 정보를 알 수 있습니다. 참고로, 이 데이터 저장소는 일반적인 데이터베이스와는 다릅니다.
세션 실습
세션 실습을 하기위해 먼저 cmd창에서 npm i express-session을 합니다.
const colors = require('colors');
const express = require('express');
const app = express();
const session = require('express-session');
app.use(session({ secret: 'thisisasecret' })); // 비밀키 설정
app.listen(3000, () => {
console.log('Listening on port 3000!'.yellow);
})
app.get('/viewcount', (req, res) => {
if (req.session.count) { req.session.count++; }
else { req.session.count = 1; }
res.send(`${req.session.count}번째 방문입니다.`);
})
connect.sid가 express 세션 쿠키의 이름입니다. 쿠키 값은 서명되어 있는 상태입니다.
위 코드로 실행하면 cmd창에 아래와 같은 경고가 뜹니다.
express-session deprecated undefined resave option; provide resave option index.js:5:9
express-session deprecated undefined saveUninitialized option; provide saveUninitialized option index.js:5:9
app.use(session({ secret: 'thisisasecret', resave: false, saveUninitialized: false }));
이렇게 바꿔주면 더 이상 경고가 뜨지 않습니다.
아래의 코드를 추가합니다.
app.get('/register', (req, res) => {
const { username = 'No-name' } = req.query;
req.session.username = username;
res.redirect('/greet');
})
app.get('/greet', (req, res) => {
res.send(`${req.session.username}님, 다시 돌아오신 것을 환영합니다!`);
})
아래와 같이 url을 치고, 엔터를 누르면 세션이 정상 작동하는 것을 볼 수 있습니다.
'웹 프로그래밍' 카테고리의 다른 글
[JS] 로그인 상태 유지 (2) | 2023.12.01 |
---|---|
[Yelpcamp 프로젝트] flash (0) | 2023.11.29 |
[JS] 쿠키 (0) | 2023.11.17 |
[Express] 라우터 (0) | 2023.11.17 |
[Yelpcamp 프로젝트] 리뷰 기능 추가하기 (1) | 2023.11.16 |