사용자가 인증에 성공한 상태 = Session
사용자가 정확한 아이디와 비밀번호를 입력하면 서버는 인증에 성공했다고 판단한다.
이후 인증을 필요로 하는 작업을 요청할 경우 (마이페이지 접속 등) 로그인 과정을 생략한다.
=> 인증에 따라 리소스의 접근 권한이 달라진다.
- 서버는 일종의 저장소에 세션을 저장한다.
주로 in-memory 또는 세션 스토어에 저장한다.- 세션이 만들어지면 각 세션을 구분할 수 있는 세션 아이디가 만들어진다.
클라이언트에 세션 성공을 증명할 수단으로써 세션 아이디를 전달한다.
쿠키는 서버에서 발급한 세션 아이디를 (암호화하여) 저장한다.
웹 사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용한다.
세션 아이디가 담긴 쿠키는 클라이언트에 저장되어 있으며, 서버는 세션을 저장한다.
서버는 클라이언트의 쿠키를 임의로 삭제할 수 없다.
대신 set-cookie
로 클라이언트에게 쿠키를 전송할 때 세션 아이디의 키값을 무효한 값으로 갱신할 수 있다.
💡 쿠키는 인증 성공에 대한 증명을 가지고 있으므로, 탈취될 경우 서버는 해당 요청이 인증된 사용자의 요청이라고 판단한다. 그렇기 때문에 공공 PC에서는 반드시 로그아웃 해야한다.
세션을 관리해주는 node.js의 모듈 (미들웨어)
express 서버에서 쉽게 세션을 위한 공간을 다룰 수 있도록 만들어준다.
const express = require('express');
const session = require('express-session');
const app = express();
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
으로 접근할 수 있으며 이를 통해 세션에 임의의 데이터를 저장하거나 불러올 수 있다.