Session이란?
- 브라우저가 아닌 서버에 저장되는 쿠키
- 사용자가 서버에 접속한 시점부터 연결을 끝내는 시점을 하나의 상태로 보고 유지하는 기능을 함 > 로그인 유지
- 서버는 각 사용자에 대한 세션을 발행하고 서버로 접근(Request)한 사용자를 식별하는 도구로 사용
- 쿠키와 달리 저장 데이터에 제한이 없음
- 만료 기간 설정이 가능하지만, 브라우저가 종료되면 바로 삭제
- 사용자가 최초로 서버 연결을 하면 하나의 Session-ID(임의의 긴 문자열) 가 발행
- 발행 된 Session-ID 는 서버와 브라우저의 메모리에 쿠키 형태로 저장
- 서버는 사용자가 서버에 접근 시, 쿠키에 저장 된 Session-ID를 통해서 서버는 사용자를 구분하고 요청에 대한 응답을 함
Cookie VS Session
- 쿠키와 세션이 하는 역할은 비슷
- 쿠키는 로컬에 저장 되므로 보안 이슈가 발생 가능성이 있음
- 세션은 로컬에 session-id 만 저장하고, 데이터는 서버에서 처리하므로 보안이 우수함
- 단, 쿠키는 데이터를 바로 저장하고 있으므로 속도가 빠름.
- 세션은 쿠키에서 session-id 를 읽어서 서버에서 데이터를 받아야 하므로 속도는 더 느림
Session Module 추가하기
npm i express-session -s
- 위 코드로 express-session 모듈 부터 설치
const session = require('express-session’);
const app = express();
app.use(
session({
secret: '원하는 비밀코드 아무거나 입력해주세요.',
resave: false,
saveUninitialized: true,
cookie: {
maxAge: 1000 * 60 * 60,
},
})
);
Session Module 옵션 설명
- secret: 세션을 발급할 때 사용되는 키 값(아무거나 입력 가능)
- resave: 모든 request 마다 기존에 있던 session에 아무런 변경사항이 없어도 session 을 다시 저장하는 옵션
- saveUninitialized: 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할지 설정
- secure > https 에서만 세션을 주고받을 수 있습니다. http 에서는 세션을 주고받는 것이 불가능
- cookie : 세션 쿠키 설정 (세션 관리 시 클라이언트에 보내는 쿠키)
- maxAge: 쿠키의 생명 기간이고 단위는 ms입니다.
- httpOnly > 자바스크립트를 통해서 세션을 사용할 수 없도록 강제