재학습/개념

[Session] 세션이란?

재이든 2023. 1. 3. 11:35
반응형

목적

우리가 사용하는 HTTP프로토콜은 서버-클라이언트 요청응답 구조이다.

클라이언트가 요청하고 서버가 응답하는 과정에서, 서버와 클라이언트 그 누구도 상태를 기억하지않는다. (Stateless)

상태를 기억하지않는다면, 같은 사용자가 요청을 했을 때

해당 요청이 같은 사용자가 요청한건지,

아니면 서로 다른 사용자가 요청한건지 알 길이없다.

따라서 웹서버의 웹 컨테이너에 브라우저별로 하나씩 사용자의 정보를 기억하기위해서 사용된다.

구현방법

각각의 웹 브라우저로부터 발생한 요청에 대해서 특별한 식별자를 부여한다.

이 식별자를 웹 브라우저로부터 발생한 요청과 비교해서 같은 식별자인지 구별한다.

이 식별자에 특정한 값을 할당할 수 있다,

이 식별자를 사용해서 세션을 유지한다.

 

처음에 서버->클라이언트로 식별자(세션ID)가 전달되고

이후에는 클라이언트->서버로만 전달된다.

다른 정보를 남기는게 아닌,

식별자로 사용자를 구분하는것만 하기때문에

쿠키보다 안전하다.

사용처

로그인 - 유저가 로그인 할 시 세션에 등록

  • 세션에 로그인정보가 있다면 → 기능 사용 가능
  • 세션에 로그인정보가 없다면 → 로그인페이지로 리다이렉트
반응형

구현

let express = require('express');

let parseurl = require('parseurl');
let session = require('express-session');

let app = express();

app.use(session({
    secret:'asadlfkj!@#!@#dfgasdg', // 세션을 암호화할 때 사용하는 키값
    resave:false, // 세션에 수정사항이 생기지 않더라도 세션을 다시 저장할지 여부
    saveUninitialized: true // 세션에 저장할 내역이 없더라도 세션을 저장할지 여부
}))


app.get('/', function(req,res,next){
    console.log(req.session);
    console.log(req.sessionID);

    if(req.session.num === undefined){
        req.session.num = 1;
    }else{
        req.session.num = req.session.num+1;
    }

    res.send(`Views : ${req.session.num}`);
})

app.listen(2000, function(){
    console.log("2000!");
})
Session {
  cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
  num: 2
}
xszRMn52ZVhjKYUpeg5Jy9NhRJih8F6_
Session {
  cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}
HhRK9hiJ_rnreEgRof1eWA9XzQk_79PP
Session {
  cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
  num: 1
}
HhRK9hiJ_rnreEgRof1eWA9XzQk_79PP

 

아래 나타는 ID값이 SessionID이다.

반응형