쿠키와 세션의 차이? express json urlencoded의 차이?
쿠키란 어떠한 웹사이트를 방문했을 때 서버가 사용하기 위해 사용자의 컴퓨터에 남기는 데이터, 기록 정보 파일을 말함. 세션 쿠키와 영구 쿠키로 나뉘는데 세션 쿠키는 임시 쿠키로 브라우저를 닫을 때 지워짐. 브라우저를 다시 시작하면 사용자를 기억 못 함. 영구 쿠키는 닫아도 지워지지 않고 사용자의 컴퓨터에 남아 있어 설정 등을 유지하기 좋음. HTTP 헤더를 사용하고 처음에 서버가 준 쿠키를 브라우저가 다른 페이지를 요청할 때 해당 쿠키를 다시 보내며 작동함. 이러한 쿠키를 사용하는 모듈이 cookie parser인데 쿠키 헤더를 파싱하고 secret 인자를 받아서 쿠키를 서명하기도 함. 쿠키 데이터를 req.cookies나 secret이 제공된다면 req.signedCookies로 제공하고 name-value 쌍을 가짐. req.headers/cookie로도 볼 수 있고 Secure; HttpOnly; priority=high; SameSite=none 등 다양한 옵션 줄 수 있음.
세션은 일정 시간 동안 한 사용자에게 들어오는 요구를 하나의 상태로 보고 그 상태를 유지하는 기술을 말함. 웹 서버에 접속해서 종료할 때 까지 접속해 있는 상태를 세션이라 말함. 이때 사용자, 클라이언트를 세션 아이디로 구분하고 이에 대한 정보를 서버에 저장함. 클라이언트에게 요청이 오면 request header field인 cookie 값에 session-id가 있는지 확인함. 없으면 response header field에 set-cookie 값으로 session-id를 줌. 그럼 클라이언트는 다음 요청 부터는 session id를 같이 넣어 보내고 서버는 이를 통해 정보를 찾고 저장함. 브라우저 종료하면 서버의 세션 데이터는 유지되고 웹 브라우저의 세션 쿠키는 사라짐. express-session으로 사용하고 req.sessionID, req.session.---로 사용함.
const sessionMiddleware= session({
resave: false, //수정사항이 없어도 세션을 다시 저장
saveUninitialized: false, // 세션 저장 내역이 없어도 처음부터 세션을 생성할지
secret: process.env.COOKIE_SECRET, //This is the secret used to sign the session ID cookie.
cookie: {
httpOnly: true, //클라이언트에서 쿠키에 접근 x
secure: false //https일 때만 쿠키 전송
}
//store로 저장공간 지정
})
express json과 urlencoded는 둘다 body parser의 일부분임. 우선 post 요청에 쓰이고 get 요청이나 delete 요청에는 쓰이지 않음. post 요청처럼 form 데이터 등 서버에게 데이터를 보내는 request 일 때 씀. 이 데이터를 받아들이거나 저장하라고 요청하며 request bdoy에 넣어 보냄. 이때 express.json()은 들어오는 request object를 json object로 만들어주고 express.urlencoded()는 들어오는 request object를 문자열이나 배열로 인식하도록 바꿔줌.
// calling body-parser to handle the Request Object from POST requests
var bodyParser = require('body-parser');
// parse application/json, basically parse incoming Request Object as a JSON Object
app.use(bodyParser.json());
// parse application/x-www-form-urlencoded, basically can only parse incoming Request Object if strings or arrays
app.use(bodyParser.urlencoded({ extended: false }));
// combines the 2 above, then you can parse incoming Request Object if object, with nested objects, or generally any type.
app.use(bodyParser.urlencoded({ extended: true }));
'노드' 카테고리의 다른 글
프로젝트 정리~~~ (2) | 2022.05.30 |
---|---|
노드 12, 13장 (0) | 2022.03.04 |
노드 10장 (0) | 2022.03.03 |
노드 8장 (0) | 2022.03.03 |
노드 7장, 9장 (1) | 2022.03.03 |
댓글