
1-1. 웹 브라우저의 쿠키 이해
1-2. 웹 서버의 쿠키 저장 및 전송
1-3. 웹 서버의 쿠키 관리 및 사용

먼저 npm install cookie-parser 명령어를 설치한다.
const cookieParser = require("cookie-parser");
app.use(cookieParser()); // 일반쿠키
app.use(cookieParser("SecretKey")); // SecretKey는 임의로 설정할 수 있는 비밀 키 (밑에서 설명)
.
.
.
res.cookie("쿠키이름", "쿠키값", "옵션객체")
2-1. 웹 브라우저와 웹 서버의 기본 설정
2-2. 웹 브라우저와 웹 서버의 쿠키 제거
2-3. 웹 브라우저와 웹 서버의 쿠키 암호화
3-1. 웹 상황에서의 쿠키 설정과 사용
3-2. 세션의 개념과 동작
📖 하이재킹 방지 쿠키속성 설명
httpOnly : 웹 서버를 통해서만 쿠키에 접근 가능하다.
maxAge : 쿠키의 수명을 설정하여, 일정 시간이 지나면 쿠키가 자동으로 삭제되도록 한다. (단위는 밀리초)
expires : 만료 날짜를 GMT 시간대로 설정한다.
path : 쿠키가 활성화될 경로를 설정하여, 특정 디렉토리와 하위 디렉토리에서만 쿠키가 사용되도록 한다.
{웹 브라우저는 해당하는 쿠키만 웹 서버에 전송 ( 기본값 : / )}
domain : 쿠키가 전송될 도메인을 특정한다. ( 기본값 : 현재 도메인 )
secure : 웹 브라우저와 웹 서버가 https로 통신하는 경우에만 쿠키를 전송한다.
signed : 쿠키의 암호화 결정하여 변조된 쿠키가 서버로 전송되는 것을 방지한다.
3-3. 세션 설정 방법과 세션 관련 옵션
4-1. 클라우드 케어를 통한 데이터 관리 개요
getDataStatus 메소드를 활용하여 데이터의 변환 상태를 실시간으로 확인할 수 있다. )4-2. 클라우드 케어를 통한 데이터 관리 심층 분석
4-3. 클라우드 케어를 통한 데이터 관리 구현
deleteSessionData 메소드를 활용하고, 성공 여부를 판단하기 위해 콜백 함수를 사용할 수 있다. )먼저 npm install express-session 명령어를 설치한다.
const session = require("express-session");
app.use(session("옵션객체"));
.
.
.
// req.session.key = value
req.session.id = req.body.id;
views/cookie.ejs 파일
<h1>Cookie</h1>
<a href="/setCookie">쿠키 설정하기</a>
<a href="/getCookie">쿠키 확인하기</a>
<a href="/clearCookie">쿠키 제거하기</a>
views/cookie.js 파일
const express = require("express");
const cookieParser = require("cookie-parser");
const app = express();
const PORT = 8000;
app.set("view engine", "ejs");
// cookie-parser
// 일반 쿠키
// app.use(cookieParser());
// 암호화 쿠키
app.use(cookieParser("mySecretKey"));
// secretKey : 비밀키
// - 서명된 쿠키가 있는 경우, 제공한 비밀키를 가지고 해당 쿠키가 내 서버가 만든 쿠키임을 인증 가능
// - 쿠키는 클라이언트에서 위조가 쉬우므로 비밀키를 통해 만든 서명을 쿠키 값 뒤에 붙임
// - 서명된 쿠키는 req.signedCookies 객체에 들어있음
// cookie 옵션 객체
const cookieConfig = {
// httpOnly: 웹 서버를 통해서만 쿠키에 접근 가능
// maxAge: 쿠키의 수명, 단위는 밀리초
// expires: 만료 날짜를 GMT 시간대로 설정
// path: 해당 디렉토리와 하위 디렉토리에서만 경로가 활성화되고
// 웹 브라우저는 해당하는 쿠키만 웹 서버에 전송 (기본값: /)
// domain: 쿠키가 전송될 도메인을 특정 가능 (기본값: 현재 도메인)
// secure: 웹 브라우저와 웹 서버가 https로 통신하는 경우에만 쿠키를 서버에 전송
// signed: 쿠키의 암호화 결정 (res.signedCookies 객체에 들어있음)
httpOnly: true,
maxAge: 60 * 1000, // 60초
signed: true, // 암호화쿠키
};
app.get("/", (req, res) => {
res.render("cookie");
});
// 쿠키 설정
app.get("/setCookie", (req, res) => {
// res.cookie(쿠키 이름, 쿠키 값, 쿠키 옵션)
res.cookie("myCookie", "myValue", cookieConfig);
res.send("set cookie!");
});
// 쿠키 확인
app.get("/getCookie", (req, res) => {
// res.send(req.cookies); // 일반 쿠키
res.send(req.signedCookies); // 암호화 쿠키
});
// 쿠키 삭제
app.get("/clearCookie", (req, res) => {
// res.clearCookie(키, 값, 옵션)
res.clearCookie("myCookie", "myValue", cookieConfig);
res.send("clear cookie!");
});
app.listen(PORT, () => {
console.log(`http://localhost:${PORT}`);
});
views/session.ejs 파일
<h1>Session</h1>
<a href="/set">세션 설정하기</a>
<a href="/get">세션 확인하기</a>
<a href="/destroy">세션 제거하기</a>
views/session.js 파일
const express = require("express");
const session = require("express-session");
const app = express();
const PORT = 8000;
app.set("view engine", "ejs");
// session 옵션 객체
const sessionConfig = {
// secure: 값을 true로 하면 https에서만 세션을 주고 받음
// secret: 안전하게 쿠키를 전송하기 위한 쿠키 서명 값 (세션을 발급할 때 사용되는 키)
// resave: 세션에 수정사항이 생기지 않더라도, 매 요청마다 세션을 다시 저장할 것인지,
// 세션을 항상 저장할 것인지 지정하는 값 (false 권장)
// saveUninitialized: 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할지 설정
// httpOnly: 웹 서버를 통해서만 쿠키에 접근 가능
// maxAge: 쿠키의 수명, 단위는 밀리초
// => cookie 객체에 넣어서 정의
secret: "mySessionSecret",
resave: false,
saveUninitialized: true,
cookie: {
httpOnly: true,
maxAge: 60 * 1000, // 60초
},
};
app.use(session(sessionConfig));
app.get("/", (req, res) => {
res.render("session");
});
// 설정
app.get("/set", (req, res) => {
// req.session.키 = 값
req.session.name = "홍길동";
res.send("set session!");
});
// 확인
app.get("/get", (req, res) => {
// req.session.키 => 값 출력
console.log(req.session.name);
console.log(req.sessionID); // 현재 세션 아이디
console.log(req.session);
res.send({ id: req.sessionID, name: req.session.name });
});
// 삭제
app.get("/destroy", (req, res) => {
req.session.destroy((err) => {
if (err) {
console.log(err);
res.send("fail");
}
res.redirect("/get");
});
});
app.listen(PORT, () => {
console.log(`http://localhost:${PORT}`);
});