Node.js에서 세션 사용하는 방법
안녕하세요. 오늘은 Node.js에서 세션을 사용하는 방법에 대해 알아보겠습니다.
세션은 쿠키를 기본으로 하여 기능을 확장한 것 입니다.
만약, 쿠키에 사용자에 대한 정보가 모두 저장되어 있다면 보안상 굉장히 위험합니다.
따라서, 접속한 사용자를 식별할 수 있는 값(id와 같은 값)만을 클라이언트에 쿠키로 저장하고 서버에는 해당 식별자에 해당하는 사용자 정보를 데이터베이스 또는 파일, 메모리에 저장하여 사용하는 것이 세션입니다.
따라서, 세션 방식과 쿠키방식의 차이점은 쿠키는 헤더정보에 Set-Cookie의 실제값을 포함시켜 요청하고,
세션에서는 set-cookie에 connect.sid 라는 식별자만(고유값)을 포함시켜 요청한다는 것이다. (클라이언트에서 관리하는 정보가 다름)
클라이언트의 컴퓨터에는 중요한 정보는 저장되어 있지 않고, connect.sid라는 식별자 값만 저장되어 있으므로, 보안적으로 안전합니다.
목적
- 세션을 사용하여 클라이언트와 서버간의 데이터를 주고 받는것을 확인한다.
요구사항
- 세션(쿠키)가 최초에 없을 때는 서버에서 count값으로 1을 보내고, 세션(쿠키=connect.sid)가 있을 시 count값을 1을 증가시켜 반환한다.
(따라서, 클라이언트에서 쿠키를 삭제하기 전까지는 1씩 증가된 값을 가지고 있게 된다.)
구축환경
- 웹프레임워크로는 express를 사용하고, express는 세션 기능을 가지고 있지 않으므로, 미들웨어(express-session)를 사용한다.
구축방법
- 패키지에 기본적으로 express와 express-session을 설치한다.
- $ npm install express --save
- $ npm install express-session --save - 사용방법은 아래 사이트를 참조한다.
- https://www.npmjs.com/package/express
- https://www.npmjs.com/package/express-session - express를 사용하여 웹서버를 띄웁니다. (예제에서는 3000번 포트를 사용합니다.)
- app.listen(3000); - 세션을 주고받을 라우터를 추가합니다.
- request에 세션정보가 없을 경우에는 1을 response하고, 있을 경우 1을 더해서 response한다.
- 크롬 개발자 도구를 사용하여 확인합니다.
var express = require('express');
var session = require('express-session'); // 세션정보는 메모리에 저장함
var app = express();
app.use(session({
secret: '1@%24^%$3^*&98&^%$', // 쿠키에 저장할 connect.sid값을 암호화할 키값 입력
resave: false, //세션 아이디를 접속할때마다 새롭게 발급하지 않음
saveUninitialized: true //세션 아이디를 실제 사용하기전에는 발급하지 않음
}));
app.listen(3000, function(){
console.log('Connected 3000 port');
});
app.get('/session', function(req, res){
if(req.session.count)
{
//request에 세션 내용이 있을 경우
req.session.count++;
}
else
{
//request에 세션 내용이 없을 경우
req.session.count = 1;
}
res.send('count: '+req.session.count);
});
실행화면
<Request Headers에 값이 있고, 서버에서 응답 받은 count값을 화면에 뿌림>
<count 값이 1증가 되는것을 확인>
<쿠키 삭제후 재실행 시, Request에 쿠키값이 없음을 확인할 수 있고, count 값으로 1 반환>
모두 즐거운 코딩하세요~