session을 알기 전에 먼저 cookie에 대해 알아야 한다.
쿠키(cookie)란?
- 쿠키(cookie)란 웹 사이트에 접속할 때 서버에 의해 사용자의 컴퓨터에 저장되는 정보를 의미합니다.
- 웹 사이트는 이렇게 저장된 사용자의 정보를 클라이언트(client) 측의 컴퓨터에 남겨서 필요할 때마다 재사용합니다.
- 사용자의 컴퓨터에 마치 과자 부스러기가 남아 있는 것과 같다고 해서 '쿠키(cookie)'라는 명칭이 붙었습니다.
- 사용자의 정보가 컴퓨터에 고스란히 남기 때문에 사생활 침해의 우려가 있으며, 보안과 관련된 이슈를 가지고 있습니다.
세션(session)이란?
- 세션(session)이란 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법을 의미합니다.
- 사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지를 세션이라고 합니다.
- 쿠키는 클라이언트 측의 컴퓨터에 모든 데이터를 저장한다면, 세션은 서비스가 돌아가는 서버 측에 데이터를 저장하고, 세션의 키값만을 클라이언트 측에 남겨둡니다.
- 이러한 세션은 보안에 취약한 쿠키를 보완해주는 역할을 하고 있습니다.
- 즉, 브라우져가 서버 방문시 서버는 세션 id를 cookie에게 주고 cookie는 그 id를 저장하고 있다가 서버 재 방문시 이 id를 이용하게 됩니다.
express-session
설치 방법은?
command 창에 아래의 명령을 입력한다.
npm i express-session
사용 방법은?
import express from "express";
import session from "express-session";
const app = express();
app.use(
session({
secret: '비밀 정보',
resave: true,
saveUninitialized: true,
})
);
- secret
- This is the secret used to sign the session ID cookie.
- Using a secret that cannot be guessed will reduce the ability to hijack a session
- resave
Forces the session to be saved back to the session store, even if the session was never modified during the request
- saveUninitialized
Forces a session that is "uninitialized" to be saved to the store.
connect-mongo
- Typescript로 작성된 Express용 MongoDB 세션 저장소.
세션을 MongoDB 저장하는 이유는?
- The default server-side session storage, MemoryStore, is purposely not designed for a production environment.
- sever 종료 시 session 정보가 사라지는데 MongoDB에 저장함으로써 session 정보를 불러올 수 있다.
- 한 예시로 사용자가 로그아웃을 하지 않고 실수로 sever를 종료했을 경우, 재 방문 시 로그인 상태가 계속 유지되는 경우 session을 저장하고 있는 상태이다.
설치 방법은?
command 창에 아래의 명령을 입력한다.
npm i connect-mongo
사용 방법은?
import express from "express";
import session from "express-session";
import MongoStore from "connect-mongo";
const app = express();
app.use(
session({
secret: '비밀 정보',
resave: true,
saveUninitialized: true,
store: MongoStore.create({mongoUrl://127.0.0.1:27017/wetube})
})
);
자료 출처
http://www.tcpschool.com/php/php_cookieSession_cookie
https://github.com/expressjs/session
https://www.npmjs.com/package/connect-mongo
http://expressjs.com/en/resources/middleware/session.html