인프런 커뮤니티 질문&답변

Tk님의 프로필 이미지
Tk

작성한 질문수

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

express server cookie관련 질문 드립니다.!

작성

·

369

0

indexRouter.get('/', (req: Request, res: Response, next: NextFunction) => {
console.log(req.cookies);
const {name, pwd} = req.cookies;
if (!name || !pwd) {
res.
sendFile(path.join(__viewPath, 'index.html'));
} else {
res.
send(`${name}님 환영합니다!`);
}
})
;

indexRouter.get('/login', (req: Request, res: Response) => {
const {name, pwd} = req.query;
const expire = new Date();
expire.setSeconds(30);
const cookieOptions = {
httpOnly: true,
expires: expire,
path: '/',
};

res.cookie('name', name, cookieOptions)
.
cookie('pwd', pwd, cookieOptions)
.
redirect('/');
});

기존 쿠키서버를 express서버로 적용해보는 과정인데요,
/login에서 받은 정보를 쿠키에 담고, redirect로 홈을 호출하고 있는데요,
문제는 홈에서 보시면 req.cookies에 쿠키가 담겨있을때가 있고, 없을때가 있습니다."
(console.log에서 쿠키값이 없을때: "
[Object: null prototype]{}" 쿠키값이 존재할때: "{test:"test"}")
혹시 쿠키가 클라이언트에게 전송되기전에 redirect가 먼저 발생하여 쿠키값이 없어, index.html을 내보내는걸까요?
6번 정도 시도한다고 가정할때 두번정도 쿠키값이 정상으로 전송되고, 나머지 4번 정도가 쿠키값이 없는 상태로 index가 호출됩니다;
(정상결과와 아닌것은 순서가 없습니다;; 운이 좋으면되고 안좋으면 안되는 느낌입니다...)
혹시 비동기 작업이랑 관련이 있을까여?

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네트워크 탭 보면서 set-cookie와 cookie 헤더가 존재하는지로 봐야할 것 같습니다. 리다이렉트 시에도 쿠키가 있어야 정상이긴 합니다.

Tk님의 프로필 이미지
Tk
질문자

네트워크 탭에서도 정상 결과면 set-cookie가 존재합니다.

Tk님의 프로필 이미지
Tk
질문자

쿠키값이 없어서 index.html을 내려준 화면에서도 response에 set-cookie를 포함하여 내려준것 같습니다..

Tk님의 프로필 이미지
Tk
질문자

문제를 찾았습니다.,.., new Date()가 문제더군요,..,

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

아, setSeconds가 30으로 고정되어있네요. 30초 뒤가 아니라 말 그대로 30초로 고정해버려서 문제였을 겁니다.

Tk님의 프로필 이미지
Tk
질문자

맞습니다. setSeconds 메써드 기능 자체가 기존 세컨즈 값에 30초를 더한다고 생각했지만,

디버깅해보니 30초로 고정해버리네요. 답변 주셔서 감사합니다!

Tk님의 프로필 이미지
Tk

작성한 질문수

질문하기