https://opentutorials.org/course/3370
생활코딩님의 Express.js강의를 참고하였습니다.
0.세션
웹 애플리케이션에서 사용자 상태를 유지하는 데 사용되는 메커니즘
사용자가 웹사이트에 방문할 때 서버는 각 사용자를 구분할 수 있는 세션을 생성하고, 이 세션을 통해 사용자의 상태와 정보를 저장합니다.
세션은 주로 로그인 상태, 장바구니 정보, 사용자 설정 등과 같은 상태 정보를 관리하는 데 사용됩니다.
1.express-session
Express.js 애플리케이션에서 세션 관리를 위한 미들웨어
세션을 설정하고 관리하는데 필요한 기능을 제공합니다.
npm install express-session
2. 세션 옵션
2-1.secret
세션 ID를 서명할 때 사용하는 비밀 문자열입니다. 이 값을 통해 세션의 무결성을 검증합니다.
2-2.resave
세션이 수정되지 않았더라도 매 요청마다 세션을 다시 저장할지 여부를 결정합니다.
2-3.saveUninitialized
초기화되지 않은 세션을 저장할지 여부를 결정합니다. 세션을 저장하지 않으면 클라이언트가 처음 방문할 때만 세션이 생성됩니다.
router.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}))
3.예시 (카운터)
// Express 모듈을 가져옵니다
var express = require('express');
// Express의 라우터를 생성합니다
var router = express.Router();
// parseurl 모듈을 가져옵니다 (URL을 파싱하는데 사용됨)
var parseurl = require('parseurl');
// express-session 모듈을 가져옵니다 (세션 관리를 위해 사용됨)
var session = require('express-session');
// 세션 미들웨어를 설정합니다
router.use(session({
secret: 'keyboard cat', // 세션 ID를 서명할 때 사용할 비밀 문자열
resave: false, // 세션이 변경되지 않아도 매 요청마다 세션을 다시 저장할지 여부
saveUninitialized: true // 초기화되지 않은 세션을 저장할지 여부
}));
// 요청이 들어올 때마다 세션 정보를 업데이트하는 미들웨어
router.use(function (req, res, next) {
// 세션에 'views' 속성이 없으면 빈 객체로 초기화합니다
if (!req.session.views) {
req.session.views = {};
}
// 요청의 URL 경로를 가져옵니다
var pathname = parseurl(req).pathname;
// 현재 경로에 대한 뷰 수를 세고 업데이트합니다
req.session.views[pathname] = (req.session.views[pathname] || 0) + 1;
// 다음 미들웨어로 이동합니다
next();
});
// '/foo' 경로에 대한 GET 요청 처리
router.get('/foo', function (req, res, next) {
// 세션에서 '/foo' 페이지를 본 횟수를 응답으로 보냅니다
res.send('you viewed this page ' + req.session.views['/foo'] + ' times');
});
// '/bar' 경로에 대한 GET 요청 처리
router.get('/bar', function (req, res, next) {
// 세션에서 '/bar' 페이지를 본 횟수를 응답으로 보냅니다
res.send('you viewed this page ' + req.session.views['/bar'] + ' times');
});
// 라우터를 모듈로 내보냅니다
module.exports = router;
4.session store
세션 데이터를 저장하는 방법과 위치를 정의하는 구성 요소
세션 데이터가 서버의 메모리, 파일 시스템, 데이터베이스 등지에 저장됩니다. 서버가 재시작되더라도 데이터가 유지될 수 있습니다
저장소에 저장된 세션 데이터는 적절한 보안 조치를 통해 보호할 수 있으며, 세션 하이재킹 및 탈취 방지에 도움을 줍니다.
5.session-file-store
Express.js 애플리케이션에서 세션 데이터를 파일 시스템에 저장하기 위한 session store 모듈
세션 데이터를 서버의 파일 시스템에 저장합니다. 파일은 기본적으로 세션 ID를 기반으로 식별되며, 각 세션의 데이터는 개별 파일로 저장됩니다.
npm install session-file-store
5-1.사용
session에 store 프로퍼티를 추가하여 File Store를 추가하였다.
var express = require('express');
var router = express.Router();
var express = require('express')
var parseurl = require('parseurl')
var session = require('express-session')
var FileStore = require('session-file-store')(session);
router.use(session({
store: new FileStore(),
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}))
카운터 코드에 session store 를 추가하면 다음과같은 파일로 세션 데이터가 남게 되어 서버를 닫고 다시 열어도 카운터가 유지된다.
/bar 페이지의 뷰 데이터가 4인것을 세션데이터로 저장하고있다.
{
"cookie": {
"originalMaxAge": null,
"expires": null,
"httpOnly": true,
"path": "/"
},
"views": {
"/bar": 4
},
"__lastAccess": 1726659189255
}
'BackEnd > Express.js' 카테고리의 다른 글
[Express.js] Passport.js (0) | 2024.09.21 |
---|---|
[Express.js] 쿠키옵션 Secure, HttpOnly, Path, Domain (1) | 2024.09.11 |
[Express.js]세션 쿠키 (Session Cookie), 영구 쿠키 (Persistent Cookie) (0) | 2024.09.11 |