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를 통해 삭제 가능하다.
반응형
'웹 개발' 카테고리의 다른 글
[포스코X코딩온] Web Session 실습 (0) | 2023.12.14 |
---|---|
[포스코X코딩온] Web Cookie 실습 (0) | 2023.12.14 |
[포스코X코딩온] Web Cookie (쿠키) (0) | 2023.12.14 |
[포스코x코딩온] Sequelize - 종속관계, api.http 사용법 (0) | 2023.12.14 |
[포스코X코딩온] Sequelize 실습 (0) | 2023.12.13 |