[요청과 응답]
// server.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>nodejs webserver test</title>
</head>
<body>
<h1>steve's webserver</h1>
<p>letsgo</p>
</body>
</html>
var http = require("http");
var fs = require("fs");
// req는 요청 res는 응답 해준다
const server = http.createServer((req, res) => {
fs.readFile("./server.html", (err, data) => {
if (err) {
throw err;
}
res.end(data); // 응답 종료시 html 파일 전송
});
});
server.listen(8080, () => { // 리스닝
console.log("Listenning on 8080 port");
});
[쿠키와 세션]
- 쿠키는 요청과 응답의 http 헤더에 담긴다
- 쿠키
- 쿠키명=쿠키값
- Expires=날짜
- Max-age=초 : 만료 시간
- Domain=도메인명 : 쿠키가 전송 될 도메인 특정, 기본은 현재 도메인
- Path=URL : 쿠키가 전송 될 URL 특정
- Secure : https경우에만 쿠키 전송
- HttpOnly : 자바스크립트가 쿠키 접근 할 수 없다, 보안 때문에 필수
const http = require('http');
const fs = require('fs');
const url = require('url');
const qs = require('qs');
const parsedCookies = (cookie = '') => {
// ; ; 로 구분된 쿠키를 오브젝트 형태로 변환
}
const session = {}; // 보통은 DB
const server = http.createServer((req, res) => {
const cookies = parsedCookie(req.headers.cookie);
if(req.url.startWith('/login')){ // 로그인 요청 받았을 시
const {query} = url.parsed;
const {name} = url.parse(query);
// 만료시점 선택
const expireTime = new Date();
expireTime.setMinutes(expireTime.getMinutes() + 원하는 분);
// 세션 만들기
const randomInt = Date.now(); // 세션 번호 만들기
session[randomInt] = {
name, expireTime,
};
// 헤더의 'Set-Cookies'에 쿠키에 넣은 녀석들 담아서 응답하면 브라우저가 저장한다
res.writeHead(302, { // 3xx 리다이렉션
Location: '/', // 이 주소로 redirect 한다
'Set-Cookies': `sessionId=${randomInt}; Expires=${expireTime.toGMTString()};
HttpOnly; Path=/`,
});
// 헤더 달린 http res 응답
res.end();
} else if (cookies.sessionId && session[cookies.sessionId].expireTime > new Date()){
// 그외 접속
// 세션 정보 있을시 로그인 요청 없어도 로그인 되어있다
// 이거 http 헤더에 명시해줘야 한글 데이터 안깨진다
res.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
res.end(`${session[cookies.sessionId].name}님 안녕하세요`);
} else {
// 기타 처음 접속해서 세션 정보없을시
}
}
server.listen(8080, ()=>{console.log("8080포트에서 리스닝 중입니다!")})