Session 이란?
일반적으로, 세션은 컴퓨터 시스템의 관리자(또는 OS 또는 서버)가 자신의 자산을 이용하는것을 허락한 사용자 (컴퓨팅)를 인식한 일정한 기간을 가리키는것으로 광범위하게 이해될 수 있다. 따라서, 세션 동안에 사용자는 시스템으로부터 허락된 범위안에서 응용프로그램,설정값,자원을 사용할 수 있게 되지만, 이러한 인스턴스는 여전히 세션관리자인 컴퓨터시스템의 감독하에 관리되어야 한다.
이러한 세션은 일반적으로 로그인의 방식을 통해 컴퓨터와 사용자간에 성사되고 유지된다.
이로써 세션은 특정 사용자를 다른 사용자로 부터 보호하거나 예기치 않은 로그아웃으로부터 특정사용자의 이전의 기록 복원이 가능하게 된다.
Session 인증방식의 process

※코드스테이츠 스프린트 코드를 가지고 설명합니다!
1. 사용자 로그인
client에서 server 측으로 사용자의 아이디와 비밀번호를 body에 담아 post 요청을 보낸다.
axios.post('https://localhost:4000/users/login', {
userId: this.state.username,
password: this.state.password
},
{ withCredentials: true })
2. 사용자 확인
server는 client에서 보내준 body 정보를 바탕으로 DB에 사용자가 있는지 확인한다.
post: async (req, res) => {
const userInfo = await Users.findOne({
where: { userId: req.body.userId, password: req.body.password },
});
//userInfo가 undefined면 사용자 정보가 없다는 뜻이므로 돌려보낸다.
if (!userInfo) {
res.status(400).send({message:"not authorized"})
}
}
3. 회원 정보 세션 생성, 4. Session ID 발급, 5. 응답 (Session ID를 쿠키에 실어 보낸다)
express-session 모듈에 의해 세션이 생성되고(session은 session 저장소에 저장) session ID는 응답의 cookie로 날려보낸다.
post: async (req, res) => {
const userInfo = await Users.findOne({
where: { userId: req.body.userId, password: req.body.password },
});
if (!userInfo) {
res.status(400).send({message:"not authorized"})
} else {
//회원 정보가 맞다면 세션을 생성한다.
//express-session에 의해 session ID가 쿠키에 담겨 client로 보내진다.
req.session.userId = userInfo.userId;
res.status(200).send({message:'ok'})
}
}

session을 쉽게 구현할 수 있는 express-session 모듈
const session = require('express-session');
app.use(
session({
secret: '@codestates',
resave: false,
saveUninitialized: true,
cookie: {
domain: "localhost",
path: '/',
maxAge: 24 * 6 * 60 * 10000,
sameSite: "none",
httpOnly: true,
secure: true,
},
})
)
express-session option
- secret (필수 옵션) - session ID를 생성하는데 사용되는 비밀키이다. 암호화할 때 salt와 같은 존재
- resave - 요청이 있을 때마다 모든 session을 다시 저장할 것인지를 결정하는 옵션
defalut는 true로 되어 있지만, 공식문서에서는 false를 권장하고 있다. - saveUninitialized - 요청이 들어왔을 때 session에 아무런 작업을 하지 않은 초기화된 상태를 저장할 것인지를 결정하는 옵션 (defalut는 true, true시 요청이 있을때 마다 아무 내용없는 session이 계속해서 저장된다.)
- store - session 저장소를 따로 설정할 수 있는 옵션
- name - cookie 이름을 설정한다
- cookie - session ID cookie 옵션을 설정한다. default는 { path: '/', httpOnly: true, secure: false, maxAge: null }
2021.10.23 - [학습] - express-mysql-session(feat.Session option saveUninitialized, store )
6. 데이터 요청, 7. 쿠키 검증, 8. 유저 정보(session) 획득
응답으로 받은 cookie는 요청을 보낼 때 자동으로 요청 header에 포함된다. server는 session 저장소에서 요청 cookie에 있는 session ID를 검증한 후 session을 반환한다. session의 접근은 'req.session'으로 가능하다.
console.log(req.session)

'학습' 카테고리의 다른 글
| sudo: npm: command not found (0) | 2021.11.10 |
|---|---|
| express-mysql-session(feat.Session option saveUninitialized, store ) (0) | 2021.10.23 |
| express 미들웨어 CORS - configuration options (0) | 2021.10.21 |
| useHistory 사용법 (0) | 2021.10.15 |
| LCM(최소공배수), GCD( 최대공약수) (0) | 2021.10.07 |