Do it Node.js express를 이용하여 서버 만들기 6편 쿠키와 세션 이용하기

2018. 3. 27. 16:30javascript/node.js

쿠키와 세션이용 하기



호스트는 클라이언트가 로그인 상태인지 확인 하기 위해서 세션과 쿠키를 사용합니다. 쿠키는 일반적으로 클라이언트 부분에 저장되고 세션은 서버에 저장되서 세션이 좀 더 보안적으로 좋다고 볼 수 있다. 우선은 쿠키를 사용해보겠다.



cookie-parser 다운로드



cookie-parser는 미들웨어이기 때문에 app.use에 등록하여 사용해야한다.



var http = require('http'), express = require('express'), static = require('serve-static'),
    bodyParser = require('body-parser'),path = require('path');
var cookieParser = require('cookie-parser');

var app = express();
var router = express.Router();
app.set('port',3000 );
app.use('/', static(path.join(__dirname,'public')));
app.use(cookieParser());
app.use('/',router);
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

router.route('/process/setCookie').get(function (req,res) {
    console.log('setCookie 요첟됨')
    res.cookie('user',{
        id:'mike',
        name:'모모랜드',
        authorized:true
    });
    res.redirect('/process/getCookie');
});

router.route('/process/getCookie').get(function (req,res) {
   res.send(req.cookies);
});


http.createServer(app).listen(app.get('port'),function () {
    console.log('포트 3000에 연결됐습니다.')
})


결과물



app.use에 등록을 한 후 res.cookie(쿠키이름,{json형식})으로 사용된다. 보고 싶으면 req.cookies로 보면된다.




session 사용하기

session을 이용하려면 npm을 통해서 다운 받아야한다. npm install express-session --save
이번에는 로그인을 통해 세션이 있다면 접근 할 수 있고 없다면 접근 하지 못하게 하는 웹 페이지를 만들어 보겠다.




var http = require('http'), express = require('express'), path = require('path'),
    cookieParser = require('cookie-parser'),static = require('serve-static'), expressSession = require('express-session'),
bodyParser = require('body-parser');
var app = express();
var router = express.Router();

app.use('/',static(path.join(__dirname,'public'))); //
app.use(cookieParser());
app.use(expressSession({
    secret:'my key',
    resave:'true',
    saveUninitialized:true
})) //미들웨어에 세션등록
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
app.use('/', router);
router.route('/login/Session').post(function (req,res) {
   var paramId = req.query.id ||req.body.id;
   var parampassword = req.body.pw;

   if(req.session.user){ //이미 로그인 되어있다면 
       console.log('이미 로그인');
       res.redirect('/ProductPage.html');
   }else {
       req.session.user= {
           id:paramId,
           password:parampassword
       } //처음 로그인 했을 때 세션등록
       console.log('처음 로그인')
       res.writeHead('200',{'Content-Type':'text/html;charset=utf8'});
       res.write('

로그인 성공 완료

'); res.write('

상품페이지로 이동


'); res.write('상품페이지'); res.end(); } }); router.route('/Product').get(function (req, res) { if(req.session.user){ res.redirect('/ProductPage.html'); }else { res.redirect('/hi.html'); } }); router.route('/session/Logout').get(function (req, res) { if(req.session.user){ req.session.destroy(function (err) { if(err) { throw err; } res.redirect('/hi.html'); }) } else { console.log('로그인 되어 있지 않습니다.'); res.redirect('/hi.html'); } }); http.createServer(app).listen(3000, function () { console.log('3000에 연결합니다.'); })


미들웨어에 등록 후 세션을 만들 때는
req.session.세션이름 = {
json형식으로
}
session을 없애고 싶을 때는 req.session.destroy(function(err){ }) 이용하면 된다.