ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 로그인 처리 - 세션2
    스프링 2023. 1. 7. 02:26

    HTTP 서블릿 세션

    서블릿은 세션을 위해 HttpSession 이라는 기능을 제공하는데, 지금까지 나온 문제들을 해결해준다.
    서블릿을 통해 HttpSession을 생성하면 랜덤한 쿠키이름을 생성해주고 이는 추정 불가능하다.

    HttpSession session = request.getSession();
            session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);

    세션이 있으면 있는 세션을 반환하고, 없으면 신규 세션을 반환한다.

    또한 세션에 로그인한 회원 정보를 보관한다.

     

     

    HttpServlet의 getSession()을 하는 것만으로 랜덤한 아이디가 생성이 된다.

    만일 getSession에 true(true가 디폴트이다)를 하게되면 세션이 존재한다면, 기존 세션을 반환한다.
    세션이 없다면 새로운 세션을 생성해서 반환한다.

    false를 하게되면 세션이 존재하면 기존 세션을 반환하고 세션이 없다면 새로운 세션을 생성하지 않고 null을 반환한다. , setAttribute만들어진 세션의 이름을 저장시켜준다.

    따라서 세션을 그냥 생성하려고 한다면 request.getSession을 해주자.

    session.setAttribute는 세션에 데이터를 저장한다. request.setAttribute와 비슷하다.

     

    로그아웃시 처리는 다음과 같다.

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

    invalidate()시 그동안 담았던 세션 정보가 모두 삭제된다.

     

     

    사이트 접속시의 처리는 다음과 같다.

    @GetMapping("/")
    public String homeLoginV3(HttpServletRequest request, Model model) {
    
        HttpSession session = request.getSession(false);
        if (session == null) {
            return "home";
        }
    
        Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER);
    
        if (loginMember == null) {
            return "home";
        }
    
        model.addAttribute("member", loginMember);
        return "loginHome";
    }

    getSession을 false로 하는 이유는 세션이 존재하는 여부를 판단하기 위해서이다.

    true를 하면 세션을 생성해버리기 때문에 의도와 맞지 않다.

    세션이 존재하면 이를 model로 담아서 view에 전달한다.

     

     

    728x90

    '스프링' 카테고리의 다른 글

    필터-1  (0) 2023.01.08
    로그인 처리 - 세션3  (0) 2023.01.07
    로그인 처리 - 세션1  (0) 2023.01.07
    로그인 처리 - 쿠키  (0) 2023.01.06
    도메인 설계  (0) 2023.01.06

    댓글

Designed by Tistory.