웹 프로그래밍

[Express] 세션

미안하다 강림이 좀 늦었다 2023. 11. 17. 22:03

 

 

세션 개요

쿠키는 많은 것을 저장할 수 없습니다. 브라우저의 쿠키 크기에는 제한이 있기 때문입니다. 또한, 쿠키는 서버 측에서 정보를 저장하는 것만큼 안전하지 않습니다. 그래서 세션이 필요합니다.

서버가 클라이언트에게 쿠키로 세션 id를 알려줍니다.
클라이언트가 서버로 요청을 보낼때 쿠키도 함께 보냅니다.

모든 데이터를 쿠키에 저장하지 않고 세션 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을 치고, 엔터를 누르면 세션이 정상 작동하는 것을 볼 수 있습니다.