지난 파이널 프로젝트때 회원관리 부분을 담당했었는데
살짝 애먹었던 로그아웃 세션 관련하여
또 한번 마주하게 되어 해결방법을 기록해본다.
트러블슈팅을 마주하게 됐던 상황은
컨트롤러 상단에 SessionAttributes를 설정하고
회원가입이나 로그인 시 회원정보 세션을 유지하게 해두었는데
기존에 배웠던 session.invalidate()로는 세션 해제가 되지 않고 세션값이 계속 유지되었다.
쿠키도 삭제해보고 여러가지 방법을 시도해봤는데 새로운 사실을 알게 되었다.
SessionAttributes의 경우 sessionStatus를 사용해 세션을 정리한다고 해서
invalidate 대신 사용해보니 정상적으로 로그아웃 시 세션 해제가 되었다.
SessionStatus는 @sessionAttributes를 활용해
session에 남긴 데이터를 제거하는데 활용하는 인터페이스라고 한다.
session : 일반적인 HttpSession 객체
sessionStatus : Spring MVC 컨트롤러에서 세션 관리를 위한 특수한 용도로 사용되는 객체
컨트롤러에 SessionAttributes로 세션 설정
sessionStatus를 사용한 로그아웃 세션 해제
@RequestMapping("/logout")
public String logout(SessionStatus sessionStatus) {
sessionStatus.setComplete();;
return "redirect:/";
}
스프링 문서
SessionStatus (Spring Framework 6.0.12 API)
Mark the current handler's session processing as complete, allowing for cleanup of session attributes.
docs.spring.io