2025. 5. 14. 13:44ㆍCoding Study/Node.js


서버에서 session 정보를 삭제 했을 때
서버에서 session 정보를 보관하기 때문에 서버에서 session을 삭제 하게 되면 로그인 시 에러가 발생된다.

서버에서 session 설정
app.use(
session({
secret: "session secret", // 암호화 할 때 열쇠와 같은 문자열
resave: false, // 내용의 변경이 없어도 저장을 할 건지
saveUninitialized: false, // 요청의 내용이 비어 있을 때 저장을 할 건지
})
);
Session 이름 설정
app.use(
session({
secret: "session secret",
resave: false,
saveUninitialized: false,
name: "session_id", // 세션의 이름 설정
})
);
로그인 요청 후 개발자 도구에서 확인 시
개발자도구 > application 탭에서 쿠키 정보를 보면 이름이 적용 된 것을 볼 수 있다.

로그인 요청(클라이언트) 및 Session 생성(서버)
< 로그인 요청 >
로그인 요청 --> 세션저장소에 정보저장 --> 저장완료 --> 세션 ID 전달 --> 정보요청 --> 세션ID 확인 --> 유저 데이터전달
function login() {
const userId = idInput.value; // 유저아이디와
const userPasswor = passwordInput.value; // 비밀번호를
return axios.post("http://localhost:3000", { userId, userPasswor }); // 서버에 post 요청한다.
}
loginButton.onclick = () => {
login() // login 함수 실행으로 위의 login 함수 실행
.then(() => getUserInfo())
.then((res) => {
console.log(res);
renderUserInfo(res.data);
});
};
서버에서는 클라이언트로 부터 전달받은 아이디와 비번으로 로 찾은 userInfo 정보를 세션에 저장해서 다시 클라이언트로 전달한다.
로그인 요청 --> 세션저장소에 정보저장 --> 저장완료 --> 세션 ID 전달 --> 정보요청 --> 세션ID 확인 --> 유저 데이터전달
app.post("/", (req, res) => {
const { userId, userPasswor } = req.body;
const userInfo = users.find(
(el) => el.user_id === userId && el.user_password === userPasswor
);
if (!userInfo) {
res.status(401).send("로그인 실패");
} else {
req.session.userId = userInfo.user_id; // req 세션객체에 id 값 저장 쿠키도 자동으로 전달된다.
res.send("세션 생성 완료"); // 응답값에 세션도 포함하여 전달됨
}
});
이후 클라이언트 요청 시에는 별도 설정 없이 seesion 도 같이 보내진다.
Session 정보 보내고 받기
<클라이언트 코드>
로그인 요청 --> 세션저장소에 정보저장 --> 저장완료 --> 세션 ID 전달 --> 정보요청 --> 세션ID 확인 --> 유저 데이터전달
function getUserInfo() {
return axios.get("http://localhost:3000");
}
loginButton.onclick = () => {
login().then(() => getUserInfo()); // 로그인 후 then 으로 get 요청을 보낸다.
};
<서버 코드 get request 처리>
get 요청을 받아서 콘솔로 확인 해 보면
app.get("/", (req, res) => {
console.log(req.session);
});
세션에 아래와 같은 객체가 들어온다.
Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
userId: 'test'
}
완성된 get request 코드
확인된 객체를 통해 유저 ID 와 Password 를 조회 하여 일치하는 유저 정보를 변수에 담아서 josn 파일로 클라이언트에 보내준다.
로그인 요청 --> 세션저장소에 정보저장 --> 저장완료 --> 세션 ID 전달 --> 정보요청 --> 세션ID 확인 --> 유저 데이터전달
app.get("/", (req, res) => {
const userInfo = users.find((el) => el.user_id === req.session.userId);
return res.json(userInfo);
});
Session 삭제
<클라이언트 코드>
function logout() {
return axios.delete("http://localhost:3000"); // 서버로 delete 요청
}
logoutButton.onclick = () => {
logout().then((res) => {
console.log(res);
renderLoginForm(); // 화면을 다시 그려주는 함수
});
};
<서버코드>
app.delete("/", (req, res) => {
req.session.destroy(); // delete 요청이 들어오면 session 삭제
res.clearCookie("session_id"); // 클라이언트 측 쿠키 삭제
return res.send("세션 삭제 완료");
});
'Coding Study > Node.js' 카테고리의 다른 글
| 카카오 로그인 기능 구현 (0) | 2025.05.16 |
|---|---|
| OAuth 인증 (0) | 2025.05.16 |
| token 인증방식 (0) | 2025.05.15 |
| cookie (0) | 2025.05.14 |
| express / axios (0) | 2025.05.13 |