Search
📙

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

로그아웃 핵심

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

세션 저장소 내부

JSESSIONID의 여행

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

로그아웃 로직 구현

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