서블릿은 세션을 위해 HttpSession 이라는 기능을 제공합니다.

HttpSession 소개

HttpSession은 직접 만든 SessionManager와 같은 방식으로 동작합니다.

서블릿을 통해 HttpSession을 생성하면 다음과 같은 쿠키를 생성합니다.

쿠키 이름이 JSESSIONID 이고, 값은 추정 불가능한 랜덤값입니다.

 Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05

HttpSession 사용

sessionConst

package hello.login.web;

public class SessionConst {
    public static final String LOGIN_MEMBER = "loginMember";
}

HttpSession에 데이터를 보관하고 조회할 때, 같은 이름이 중복되어 사용되어 상수를 정의했습니다.

LoginController

@PostMapping("/login")
    public String loginV3(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletRequest request){
        if (bindingResult.hasErrors()){
            return "login/loginForm";
        }

        Member loginMember = loginService.login(form.getLoginId(), form.getPassword());

        if (loginMember == null){
            bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다");
            return "login/loginForm";
        }

        //로그인 성공 처리
        //세션이 있으면 있는 세션 반환, 없으면 신규 세션을 생성
        HttpSession session = request.getSession();
        //세션에 로그인 회원 정보 보관
        session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);

        return "redirect:/";
    }

    @PostMapping("/logout")
    public String logoutV3(HttpServletRequest request){
        HttpSession session = request.getSession(false);
        if(session != null){
            session.invalidate();
        }
        return "redirect:/";
    }