expression-session(2) 정리

김현진·2020년 8월 1일
1

안녕하세요.

express-session(1) 정리에 이어 글을 이어서 써 보겠습니다.

우선 서버에서 쿠키를 보내는 방법을 한번 구현해보겠습니다.

우선 터미널창을 열고

npm init -y (엔터)

npm i express express-session cookie cookie-parser (엔터)

위에서 보듯이 띄어쓰기 하나로 한줄에 여러개의 모듈들을 한번에 설치를 할 수 있습니다.(꿀팁)

VSCode상에서 index.js 파일을 하나 만듭니다.

const express = require('express'); // express 모듈을 이용하여 서버를 구동할꺼야
const cookieParser = require('cookie-parser'); 쿠키를 분석해주는 모듈
const fs = require('fs'); // 파일시스템 모듈 => 여기서는 중요한 내용이 아닌 모듈입니다.

이렇게 3개를 require를 해줍니다.

그리고

const app = express();

app.use(express.json()); // 이 미들웨어를 적어야 req.body를 이용하여 서버로 오는 바디값을 읽을 수 있음
app.use(express.urlencoded({ extended: true })); // 이 미들웨어를 적어야 req.body를 이용하여 서버로 오는 바디값을 읽을 수 있음
app.use(cookieParser()); // cookie 분석 미들웨어 장착!!!

여기서 미들웨어라는 말이 있는데 어떤 추가기능을 덧붙인다라고 생각을 하시면 편합니다.

나는 app.use(express.json()); 을 통해서 express.json() 기능을 추가할꺼야(요청 바디값을 읽을 수 있게). app.use()를 통해서 미들웨어를 장착 할 수 있습니다.

계속 Go

app.get('/', (req, res, next) => {
  console.log('req',req.cookies);
  res.cookie('cook', 'good', { //
    maxAge: 60*60*1000, // 만료시간을 밀리초로 계산
    httpOnly: true, // 웹서버를 통해서만 cookie를 접근할 수 있도록 한다
  });
  res.end(fs.readFileSync('client/index.html')); // html 파일을 보낼꺼야 => 이 부분은 사용자마다 다르니 알아서 구현하시면 됩니다.

app.listen(8080, () => {
  console.log('연결')
}); // 8080번 포트를 쓸꺼야
});

만약 '/' 에서 get 요청이 온다면 쿠키값은 cook = good 형태로 보낼 것이고

옵션값을 추가하였습니다.

옵션

maxAge : 만료 시간을 밀리초 단위로 설정
expires : 만료 날짜를 GMT 시간으로 설정
path : cookie의 경로 default “/“
domain : 도메인 네임 default “loaded”
secure : https에서만 cookie 사용할 수 있도록 한다.
httpOnly : 웹서버를 통해서만 cookie 접근할 수 있도록 한다
signed : cookie가 서명되어야 할 지를 결정한다.

즉 다시 말해 res.cookie의 첫번째 인수값은 쿠기값에 대한 내용이고 두번째는 이 쿠키에

대한 옵션적인 내용을 적어주면 됩니다.

쿠키는 개인정보 유출 방지를 위해 쿠키를 주기적으로 지워줘야 안전하다고 합니다.

그런 다음 서버를 켠 다음 쿠키값을 확인 하면 cooke = good 이라는 값을 들어가 있는것을

확인 할 수 있을겁니다.

서버를 키는방법 터미널 창을 켠다음

node index.js (index.js 위치를 확인 한 후 )

저는 port를 8080 쓰고 있으므로 크롬 빈페이지를 열어서 주소창에

localhost:8080을 입력 하신 후 엔터 ( / get요청이 서버에게 전송이됨 )

그런 다음 브라우저 창에서 오른쪽 마우스를 클릭한 다음 검사를 누른 다음 상단 network 

들어가서 localhost 클릭 후 쿠키값을 확인 하시면 됩니다.

서버가 보낸 쿠키값이 브라우저 쿠키값으로 정상적으로 들어간 걸 확인을 할 수 있습니다.

이제부터 서버에게 요청을 보낼때 헤더에 쿠키값을 담아서 요청을 보낼 것입니다.

(서버야 나는 누구누구야 잘 부탁해)

이제부터 세션을 알아보도록 하겠습니다. (express-session을 이용하여)

app.use()를 이용하여 express-session 모듈을 미들웨어로 장착하면 됩니다.

기존 코드에 코드를 추가하시면 됩니다.

const session = require('express-session');

app.use(session{
  secret: process.env.SESSION_SECRET_KEY,
  resave: false, // resave는 요청이 왔을 때 세션에 수정 사항이 생기지 않더라도 세션을 다시 저장할지에 대한 설정
  saveUninitialized: false // saveUninitialized는 세션에 저장할 내역이 없더라도 세션을 저장할지에 대한 설정
});

express-session은 세션 관리 시 클라인트에게 쿠키를 보냅니다.

안전하게 쿠키를 전송하려면 쿠키에 서명을 추가해야 하고, 쿠키를 서명하는 데 secret의 값

이 필요합니다. cookie-parser의 secret과 같게 설정하는 것이 좋습니다. 세션쿠키의

이름은 name 옵션으로 설정합니다. 기본 이름은 connect_sid로 설정됩니다.

secret: process.env.SESSION_SECRET_KEY

이렇게 하였는데 secret 값은 남들에게 노출되면 안되므로 환경변수 설정을 하였습니다.

cookie-parser secret값을 같게 설정 해주는것이 좋습니다.

기존 코드에 추가하시면 됩니다.

app.use(cookie-parser(process.env.SESSION_SECRET_KEY);

express-session으로 만들어진 req.session 객체에 값을 대입하거나 삭제해서 세션을

변경 할 수 있습니다.

나중에 세션을 한 번에 삭제할려면 req.session.destroy 메서드를 호출하면 됩니다.

현재 세션의 아이디는 req.sessionID로 확인 할 수 있습니다. 세션을 강제로 저장하기 위

해 req.session.save 메소드가 존재하지만 일반적으로 요청이 끝날때 자동으로 호출되므로

직적 save메소드를 호출할 일은 거의 없습니다.

그럼 코드를 이용하여 실습을 해보겠습니다.

다음 시간에 ^^

profile
기록의 중요성

0개의 댓글