logoStephen's 기술블로그

포스트 검색

제목, 태그로 포스트를 검색해보세요

#블로그만들기_10 #로그아웃

#블로그만들기_10 #로그아웃
SpringWebApp
성훈 김
2024년 2월 6일
목차

1️⃣ 로그아웃 핵심

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

🔹 세션 저장소 내부

notion image
 
 

🔹 JSESSIONID의 여행

💡
🔹 클라이언트가 request요청을 하면 서버는 특정 조건에 따라 jsessionid영역을 만든다. 🔹 서버(스프링)가 response응답을 할 때 response headerset-cookie 값에 jesessionid를 담아서 전달된다. 🔹 클라이언트(브라우저)는 set-cookie 값을 브라우저의 쿠키 저장소에 저장한다. 🔹 클라이언트 다시 request 요청을 하게 되면, request headercookie값에 jsessionid를 담아서 요청 🔹 서버는 jsessionid를 확인해서 아까 왔던 사람인지 체크한다. 🔹 이렇게 statelesshttpstateful이 된다. → 서버가 클라이언트를 기억
notion image
 
 

2️⃣ 로그아웃 로직 구현

💡
🔹 Http에서 a 태그는 Get요청 임을 기억하자. 🔹 a 태그에 /logout 식별자와 연동이 되면 된다.
notion image
 
 
💡
🔹 아래 코드를 UserController내부에 구현한다.
Java
@RequiredArgsConstructor
@Controller
public class UserController {
    private final UserRepository userRepository;
    private final HttpSession session;

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