[HTTP]
- 무상태성!
[쿠키 그대로 사용한다면]
- 쿠키에 모든 사용자 정보를 담아서 클라이언트에 전달
- 보안에 취약 : 중간 탈취, 쿠키 스토리지 탈취
[세션이란]
- 클라이언트 요청 시 사용자를 식별할 수 있는 id값이 담긴 쿠키 응답
- 헤더에 쿠키 그리고 요청 : 서버에서 쿠키를 받아 사용자 id값을 가지고 서버 측 db에 저장된 사용자 정보를 가지고 응답 할 때 사용
=> 동일한 session-id값을 가지고 요청하면 동일 클라이언트
- node 모듈 중 express 서버에서 session을 쉽게 구현할 수 있는 미들웨어를 제공하는 express-session이 있음
- 설치하기 : npm i express-session
[express-session 사용하기 : 로그인 정보 유지]
- 1.5.0 version부터 cookie-parser를 같이 사용하지않아도 됨 : req, res 객체로 쿠키를 직접 받고 응답함
=> 부딪칠 수 있는 설정값이 있으므로, 함께 사용하기위해서 api 문서를 읽고 설정값을 맞춰주면 됨
=> express-session은 쿠키에 sid를 담아 클라이언트에 응답(최초 응답 시)함 : sid를 가지고 동일한 브라우저인지 판단
=> sid 구분없이 데이터를 리턴한다면 cookie-parser를…..?!
1) express 서버 구현 : 코드 생략
2) express-session 사용하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /* middleware */ app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use(session({ secret: '1q2w3e4r', resave: false, saveUninitialized: true })); /* route */ /* mypage */ app.get('/user', (req, res) => { let content; if(req.session.userName){ /* 리얼 쿠키값에 저장된 아이디를 뷰에서 사용할 수 있도록 함 : session-id값에 맞는 아이디를 줄 수 있도록 설계를 해야겠지 원래는? */ /* 리얼 쿠키가 있을 때 로그인 정보가 나옴(sid에 맞는 리얼 cookie에 저장된 값) */ content = `<h1>${req.session.userName} 님 안녕하세요.</h1>`; } else { content = `<form action='/user' method='post'> <p>아이디 : <input type='text' name='name' /></p> <p>비밀번호 : <input type='password' name='pwd' /></p> <input type='submit' value='로그인' /> </form>`; } res.send(content); }); /* login */ app.post('/user', (req, res) => { /* 로그인 할 때 세션 쿠키에 session-id값 넣어서 주고, 리얼 쿠키에 아이디 저장 그리고 메인 페이지로 리다이렉트 */ /* req.body로 받은 정보 db랑 확인하고 맞다면 세션쿠키와 리얼쿠키 */ let isRight = false; if(userInfo.nick === req.body.name && userInfo.pwd === req.body.pwd){ isRight = true; } if(isRight){ req.session.userName = userInfo.name; } else { res.status(401).redirect('/user'); } res.redirect(301, '/user'); /* 상태 코드를 달리할 수 있음 : 3XX 코드 참고*/ }); | cs |
- req.session : 요청 객체의 객체 프로퍼티 - 쿠키값(실제 데이터 값), 쿠키 설정이 담긴 객체
=> sessionID 발급해줄 때 쿠키값 설정 : req.session 내 저장
- req.sessionID : 클라이언트 구분 session-id
=> 두개의 브라우저에 리턴된 req.sessionID값 콘솔 로그찍어본 결과
- 흐름 : session id가 담긴 쿠키를 첫 응답 시 주고, session id에 일치하는 쿠키값을 가지고 서버에서 처리 후 응답
- 아래는 세션이 유지되는지 확인한 짤
- 아래는 세션이 유지되는지 확인한 짤
3) 정리
- 세션은 쿠키를 가지고 쿠키 방식 클라이언트 구별을 보안한 방법
- session id 구별은 express-session을 사용해서 쉽게 처리
- ejs와 같은 뷰 템플릿을 활용하면 js 코드에서 태그를 쓰지않아도됨....
- db를 활용해서 정보를 조회하고 req.body에 담긴 내용과 비교 후 세션 발급을 하면 되겠음
[더하기]
- 세션 스토리지
[참고자료]
- github, express-session readme.md : https://github.com/expressjs/session
'nodejs' 카테고리의 다른 글
[node.js] 외부DB 연동 전 준비하기 #1 - RHEL + mysql (0) | 2017.06.26 |
---|---|
[node.js] express - 라우터, 컨트롤러 나누기 (1) | 2017.06.20 |
[node.js] express - HTTP 쿠키 사용하기 (0) | 2017.06.18 |
[node.js] AJAX API 서버 만들기 (0) | 2017.06.17 |
[node.js] 유저 목록 조회, 유저 조회, 삭제 테스트 + API 서버 구현 (0) | 2017.06.16 |
댓글