💬 회원가입 및 로그인 기능 활용 시 쿠키, 세션 기능이 활용 될 수 있다. 기존 로그인 기능의 경우 JWT, passport 로그인 기능 구현 시 활용 했었다.
하지만 각각의 구체적인 기능 및 사용법 등에 대해서는 알지 못했고 이번에 정리해 보기로 했다.
📌 접속 상태 저장 경로 : 클라이언트
📌 장점
📌 단점
📌 접속 상태 저장 경로 : 서버
📌 장점 :
📌 단점
보통 인증 및 로그인 기능 구현 시 접속 상태를 서버가 가지며(Stateful), 접속 상태와 권한 부여를 위해 세션 아이디를 쿠키로 전송
사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있습니다.
쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조합니다.
웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터에 파일 또는 메모리에 저장하는 작은 기록 정보 파일입니다.
파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀔 수 있습니다.
HTTP의 stateless 특징을 보완해주는 도구로 작은 문자열을 저장
Stateless
- 각각의 요청은 독립적이기 때문에 이전 요청에 대한 것을 기억하지 않음
- 로그인 정보고 기억하지 못하기 때문에 로그인 정보를 쿠키에 저장
- 세션쿠키의 경우 서버에서 (defalut) name인 connect.sid에 해당 유저의 아이디를 signed(서명)된 형태로 보내주게 됨 (connect.sid=서명된 문자열(해당 유저의 아이디))
📌 Cookie를 이용한 Server-Client 흐름
google.com 의 쿠키
📌 Name: 키(Key)
📌 Value: 값(Value)
📌 Expires: 쿠키 만료 기한
쿠키에 만료일이 포함되어 있지 않으면 영구적 쿠키로 간주하기 때문에 Max-Age를 통해 지정된 만료일을 지정해 주는 것이 중요하다.
📌 Domain : 쿠키가 사용되는 도메인을 지정하여 다른 도메인이 해당 쿠키를 사용하지 못하도록 설정
📌 Path: 쿠키를 반환할 경로를 결정
📌 Secure: 보안 연결 설정 (HttpOnly등의 설정 가능)
📌 Session Cookie
📌 Persistent Cookie
📌 Secure Cookie
📌 Third-Party Cookie
// 세션: req.session => 해당 사용자에 대한 고유한 개인 저장소 역할
const session = require('express-session');
const sessionOption = {
// 요청이 왔을 때 세션에 수정사항이 생기지 않더라도 다시 저장할지 여부
resave: false,
// 세션에 저장할 내역이 없더라도 세션을 저장할지
saveUninitialized: false,
// signed 되어 있기 때문에 읽을 수 없는 문자열로 되어 있음
secret: process.env.COOKIE_SECRET,
cookie: {
// 자바스크립트 공격 방지
httpOnly: true,
secure: false,
}
// name: 'connect.sid', //default 이름
}
app.use(session(sessionOption))