[Diary] SPRING 스터디 Cookie & Session

Shaun.the.sheep·2025년 7월 18일

[Dairy] S.C.C TIL

목록 보기
6/22

들어가기 전

항상 그렇지만 비슷한 거라도 조금이라도 다르면 머릿속에서 매치하기란 힘든거 같다...

Session & Cookie

  • 클라이언트 측에서 저장하고 있는 사용자 정보 및 로그
    @PostMapping("/login")
    public String login(
            @Valid @ModelAttribute LoginRequestDto request,
            HttpServletResponse response // 쿠키값 세팅에 필요
    ) {
        // 로그인 유저 조회
        LoginResponseDto responseDto = userService.login(request.getUserName(), request.getPassword());

        if (responseDto.getId() == null) {
            // 로그인 실패 예외처리
            return "login";
        }

        // 로그인 성공 처리
        // 쿠키 생성, Value는 문자열로 변환하여야 한다.
        Cookie cookie = new Cookie("userId", String.valueOf(responseDto.getId()));

        // 쿠키에 값 세팅 (expire 시간을 주지 않으면 세션쿠키가 됨, 브라우저 종료시 로그아웃)
        // Response Set-Cookie: userId=1 형태로 전달된다.
        response.addCookie(cookie);

        // home 페이지로 리다이렉트
        return "redirect:/home";
    }

조금 더 사용하는 부분으로 보게 되면 home으로 이동하는 mapping 함수를 보면 된다.

  @GetMapping("/home")
    public String home(
            // @CookieValue(required = true) 로 필수값(default) 설정
            // required = false 이면 필수값 아님.
            @CookieValue(name = "userId", required = false) Long userId, // String->Long 자동 타입컨버팅
            Model model
    )

클라이언트 측에서 들어오는 값들 중 @CookieValue 어노테이션으로 설정 해주면 자동 반환된다.


물론 이렇게 심플하게 사용할 거 같지는 않지만...
쿠키 사용 법과 사용 예제에 대해서 조금 더 알아보는 포스트는 추후에 만들어보겠다.

Session

  • 서버에 민감한 정보들을 저장한다.
  • 코드 내에서는 interface나 abstract로 관리해야한다.

public interface Const {
    String LOGIN_USER = "loginUser";
}

Servlet의 HttpSession

  • SessionId는 JSESSIONID로 생성 Value는 예측 불가능한 랜덤 값으로 생성
  @PostMapping("/session-logout")
    public String logout(HttpServletRequest request) {
        // 로그인하지 않으면 HttpSession이 null로 반환된다.
        HttpSession session = request.getSession(false);
        // 세션이 존재하면 -> 로그인이 된 경우
        if(session != null) {
            session.invalidate(); // 해당 세션(데이터)을 삭제한다.
        }

        return "redirect:/session-home";
    }

request.getSession(false);
위의 부분의 파라미터 bool 값은

  • true일 경우 세션 생성
  • false일 경우 세션이 없을 경우는 null 값 반환
    세션 예제
    개발자 도구의 쿠키에서 세션의 랜덤 값과 로그인 상태를 확인해볼 수 있다.

0개의 댓글