: 사용자가 인증(Authentication)에 성공한 상태
클라이언트에 저장된 쿠키는 세션 ID(인증 성공에 대한 증명)을 가지고 있고, 서버는 세션을 저장하고 있다.
그리고 서버는 클라이언트가 보내는 세션 ID로만 인증 여부를 판단한다.
로그아웃을 구현하기 위해서는 다음 두 가지 작업을 해야 한다.
set-cookie
로 쿠키를 전송할 때, 세션 ID값을 무효한 값으로 갱신해야 한다.): Node.js에서 세션을 쉽게 관리할 수 있도록 돕는 미들웨어
const express = require('express'); // Express 모듈 불러오기
const session = require('express-session'); // express-session 모듈 불러오기
const app = express(); // 서버 실행
express-session을 사용해 세션의 옵션을 지정할 수 있다.
secret
옵션의 비밀 키를 이용해 암호화한 세션 ID를 생성하고, 이것을 클라이언트에게 쿠키로 전송한다.app.use(
session({
secret: '@codestates',
resave: false,
saveUninitialized: true,
cookie: {
domain: 'localhost',
path: '/',
maxAge: 24 * 6 * 60 * 10000,
sameSite: 'none',
httpOnly: false,
secure: true,
}
})
);
req.session
으로 접근할 수 있으며, 세션에 임의의 데이터를 저장하거나 불러올 수 있다.쿠키 | 세션 | |
---|---|---|
설명 | 쿠키는 그저 HTTP의 무상태성(Stateless)을 보완해주는 도구 | - 접속 상태를 서버가 가진다.(Stateful) - 접속 상태와 권한 부여를 위해 세션 아이디를 쿠키로 전송한다. |
접속 상태 저장 경로 | 클라이언트 | 서버 |
장점 | 서버의 부담을 덜어준다. | 신뢰할 수 있는 유저인지 서버에서 추가로 확인 가능하다. |
단점 | 쿠키 그 자체는 인증이 아니다. | 하나의 서버에서만 접속 상태를 가지므로 분산에 분리하다. |