• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

session[cookies.session] 가 두번 반복된 이유가 궁금합니다.

18.10.04 10:38 작성 조회수 132

0

안녕하세요. 추석 잘 보내셨길 바랍니다.

본문의 코드 중에서

cookies.session && session[cookies.session] && session[cookies.session].expires 부분을 보다가 궁금한 점이 있어서 질문 드립니다.

무엇 때문에. session[cookies.session]를 두번 쓰고, 그 이후에 expires를 붙인 것인가요?

실제로 session[cookies.session].expires를 한번만 쓰면 에러가 납니다. 코드를 리뷰 해봐도 알 수가 없네요. 어차피 같은 값이고, 똑같이 &&을 사용 했는데도 말이죠.

아래는 질문 한 부분의 코드 입니다.

else if (cookies.session && session[cookies.session] && session[cookies.session].expires > new Date()) {

res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });

res.end(`${session[cookies.session].name}님 안녕하세요`);

이하는 코드 전문입니다. 

```

const http = require('http');

const fs = require('fs');

const url = require('url');

const qs = require('querystring');

const session = {};

function parseCookies(req) {

const list = {};

const cookieString = req.headers.cookie;

if (cookieString) {

console.log(cookieString)

cookieString.split(';').forEach((cookie) => {

  const parts = cookie.split('='); //list 짤막하게 나눠진 리스트. for each 마다. 

list[parts.shift().trim()]/* list가 옵젝이니, [] 형태로 key 값을 주는 거다. = 다음은 value */ = decodeURI(parts.join('='));

}); //이말은 뭐냐. 처음의 것만 key 값으로 빼고, 그다음 것들은 a=1 식으로 붙여준다는 이야기다. foreach 마다. cookie의 데이터 형태에 익숙하지 않아서 벌어진 문제다.

}

return list;

}

http.createServer((req, res) => {

const cookies = parseCookies(req);

console.log(cookies)

if (req.url.startsWith('/login')) {

const { query } = url.parse(req.url);

const { name } = qs.parse(query);

const expires = new Date();

const randomInt = +new Date();

expires.setMinutes(expires.getMinutes() + 5);

session[randomInt] ={

name,

expires

}

res.writeHead(302, {

Location: '/',

'Set-Cookie': `session=${encodeURIComponent(randomInt)}; Expires=${expires.toGMTString()}; HttpOnly; Path=/`,

});

res.end();

} else if (cookies.session && session[cookies.session] && session[cookies.session].expires > new Date()) {

res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });

res.end(${session[cookies.session].name}님 안녕하세요);

} else {

fs.readFile('./server4.html', (err, data) => {

if (err) {

throw err;

}

res.end(data);

});

}

})

.listen(8083, () => {

console.log('8083번 포트에서 서버 대기중입니다!');

});

답변 1

답변을 작성해보세요.

0

session[cookies.session]이 undefined면 코드에 에러가 나기 때문에 그것을 막기 위한 보호 처리라고 보시면 됩니다