1️⃣ 로그아웃 핵심
🔹 브라우저 쿠키의 jsessionid를 삭제
🔹 서버측 세션에 jsessionid의 영역을 삭제
🔹 30분 동안 request 요청이 없으면 로그아웃
서버측에서 session을 무효화 시켜버리면 서랍의 내용이 날라간다.
🔹 세션 저장소 내부

🔹 JSESSIONID의 여행
🔹 클라이언트가
request
요청을 하면 서버는 특정 조건에 따라 jsessionid
영역을 만든다.
🔹 서버(스프링)가 response
응답을 할 때 response header
에 set-cookie
값에 jesessionid
를 담아서 전달된다.
🔹 클라이언트(브라우저)는 set-cookie
값을 브라우저의 쿠키 저장소에 저장한다.
🔹 클라이언트 다시 request
요청을 하게 되면, request header
의 cookie
값에 jsessionid
를 담아서 요청
🔹 서버는 jsessionid
를 확인해서 아까 왔던 사람인지 체크한다.
🔹 이렇게 stateless
한 http
가 stateful
이 된다. → 서버가 클라이언트를 기억
2️⃣ 로그아웃 로직 구현
🔹 Http에서 a 태그는
Get요청
임을 기억하자.
🔹 a 태그에 /logout
식별자와 연동이 되면 된다.
🔹 아래 코드를
UserController
내부에 구현한다.@RequiredArgsConstructor @Controller public class UserController { private final UserRepository userRepository; private final HttpSession session; @GetMapping("/logout") public String logout() { session.invalidate(); // 서랍 비우기 -> 로그아웃 return "redirect:/"; }

세션과 리퀘스트의 생명주기는 어떻게 되는가??
🔹 세션과 리퀘스트의 생명주기는 Tomcat의 스코프랑 연관이 있다.
➖ 세션의 생명주기가 무효화 될 때 까지 (3가지) - 응답이 완료되거나, invalidate 되거나, 만료시간이 되었을 때
🔹 순서
application
>> session
>> request
로 짧아진다.
➖ application
→ 서버가 시작되고 종료될 때 까지
➖ session
→ 클라이언트가 최초로 서버에 접속하여 세션을 생성할 때 부터, 세션이 만료되거나 무효화 될 때 (invalidate)될 때 까지 유지
➖ request
→ 클라이언트가 서버에 요청을 보내고, 서버가 클라이언트에게 응답을 보낼 때까지 유지