웹 개발

[포스코X코딩온] Web Session(세션) 설정

끊임없이 성장중인 개발자 2023. 12. 14. 19:39
728x90
반응형

포스팅 주제

  • Session (세션)

Session을 설정하고 연결해보자!

 

Session 이란?

  • 웹 서버에 저장되는 쿠키
  • 사용자가 웹 브라우저를 통해 접속한 시점부터 연결을 끝내는 시점까지의 시간 동안 일련의 요구를 하나의 상태로 보고 그 상태를 유지시킨다. ( 로그인 유지 )

 

Session의 동작 방식

1) . 클라이언트가 서버에 접속 시 세션 ID 발급 => 2). 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있는다 =>

3). 클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 서버에 전달해서 사용 =>

4). 서버는 세션 ID를 전달받이서 별다른 작업 없이 세션 ID로 세션에 있는 클라이언트 정보를 가져온다 =>

5). 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에세 응답

 

Cookie VS. Session

  • 전체적인 역할과 동작 원리는 비슷하다 ( 세션 = 서버 쿠키 )
  • 쿠키 - 로컬 < = > 세션 - 서버
  • 보안
    • 보안은 세션이 더 높다
  • 속도
    • 속도는 쿠키가 더 빠르다

 

실습

Session을 사용하기 위해서는 npm을 설치해야한다.

npm install express-session

 

폴더 구조는 전체적으로 간단하게 만들었다 ( 이전 포스팅 쿠키와 같은 폴더에 구성했다 )

 

< views - session.ejs >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Session</title>
</head>
<body>
    <h1>Session</h1>

    <a href="/set">세션 설정</a>
    <a href="/name">세션 확인</a>
    <a href="/destroy">세션 삭제</a>
</body>
</html>

 

  • set: 접속시 세션을 설정해준다.
  • name: 접속시 세션 이름(값)을 확인한다.
  • destroy: 접속시 세션을 삭제한다.

 

< session.js >

const express = require('express');
const session = require('express-session');
const app = express();
const PORT = 8000;

app.set('view engine', 'ejs');
app.set('views', './views');

// session 옵션 개체
// secure : 값을 true로 하면 https에서만 세션을 주고 받음
// secret : 안전하게 쿠키를 전송하기 위한 쿠키 서명 값 (세선 발급할 때 사용되는 키)
// resave : 세션에 수정 사항이 생기지 않더라도, 매 요청(req)마다 세션을 다시 저장할 것인지, 세션을 항상 저장할 건지 지정하는 값(false 권장 : 수정 값이 생길때만 저장)
// saveUninitialized : 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할 지 설정
// httpOnly : 웹 서버를 통해서만 쿠키에 접근 가능
// maxAge : 쿠키 수명 (단위 : ms)
// => cookie 객체에 넣어서 정의

app.use(session({
    secret: 'mySessionSecret',
    resave: false,
    saveUninitialized: true,
    cookie:{
        httpOnly:true,
        maxAge: 60*1000 // 1분
    }
}))

app.get('/', (seq,res) => {
    res.render('session');
})
app.get('/set', (req,res) =>{
    // 세션 셜정 req.session.키 = 값
    req.session.name = "홍길동"; // 의미는 { name : '홍길동'}
    res.send('세션 설정 완료');
})

app.get('/name',(req,res) => {
    console.log(req.session.name);
    console.log(req.sessionID);
    console.log(req.session);
    res.send({id: req.sessionID, name: req.session.name});
})

app.get('/destroy',(req,res) => {
    req.session.destroy((err) => {
                // 삭제하고 실행될 함수
        if(err){
            console.log(err);
            res.send('Fail');
        }
        res.redirect('/name') // 세션 객체에서 name 키 값 사라짐
    })
})

app.listen(PORT, () => {
    console.log(`http://localhost:${PORT}`);
})

 

req.session.name으로 세션에 이름을 설정할 수 있다.

session 옵션에 secret값을 주면 session.id 값을 암호화해준다.

session 삭제는 session.destroy를 통해 삭제 가능하다.

 

 

 

 

반응형