반응형
목적
우리가 사용하는 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이다.
반응형
'재학습 > 개념' 카테고리의 다른 글
라이브러리는 최고야.. 짜릿해.. (0) | 2023.07.03 |
---|---|
JWT (Json Web Token) 간략하게 정리하고 가자 (0) | 2021.08.01 |