예제 코드 및 분석
var express = require("express");
var parseurl = require("parseurl");
var session = require("express-session");
var app = express();
app.use(
session({
secret: "keyboard cat",
resave: false,
saveUninitialized: true,
})
);
app.get("/", function (req, res, next) {
console.log(req.session);
if (req.session.num === undefined) {
req.session.num = 1;
} else {
req.session.num = req.session.num + 1;
}
res.send(`Views : ${req.session.num}`);
});
app.listen(3001, function () {
console.log("Example code running on port 3001");
});
session 객체에 num이 없다면 1로 초기화 해주고 num 있으면 기존값 += 1 해주는 간단한 기능 구현
근데 session store의 인스턴스 저장소 기본값은 Memory라서 서버끄면 휘발됨
session store의 다변화
앞서 구현한 기능은 휘발성인데 공식문서(Compatible Session Stores)를 참조해보면 session 을 저장할 저장소 옵션이 많이 있다. MySQL을 사용할 예정이다.
const express = require('express');
const session = require('express-session');
const MySQLStore = require('express-mysql-session')(session);
const mysql = require('mysql2');
const app = express();
const port = 3000;
const options = {
host: 'localhost',
port: 3306,
user: 'root',
password: 'password',
database: 'session_test'
};
const connection = mysql.createConnection(options);
const sessionStore = new MySQLStore({}, connection);
app.use(session({
key: 'session_cookie_name',
secret: 'your_secret_key',
store: sessionStore,
resave: false,
saveUninitialized: false
}));
app.get('/', (req, res) => {
if (req.session.views) {
req.session.views++;
res.send(`You visited this page ${req.session.views} times`);
} else {
req.session.views = 1;
res.send('Welcome to the session demo. Refresh the page!');
}
});
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
서버 실행 시 MySQL에서 sessions 테이블 생성 확인

이제 데이터가 휘발되지 않는다.