Spring Cookie와 Session (로그인 유지 예제)

반응형

쿠키(Cookie)

  • `클라이언트 측`에 저장되는 작은 텍스트 파일
  • 서버에서 클라이언트로 전송되어 클라이언트 측에 저장됩니다.
  • 클라이언트 요청 시에 요청 헤더에 쿠키를 포함하여 서버에 전송됩니다.
  • 만료 기간을 설정할 수 있어서 일정 기간 동안 유지될 수 있습니다.
  • 클라이언트 측에서 수정 가능하므로 보안에 취약할 수 있습니다.
@Controller
public class CookieController {

    @GetMapping("/setCookie")
    public String setCookie(HttpServletResponse response) {
        // 쿠키 생성 및 설정
        Cookie cookie = new Cookie("username", "Kim");
        cookie.setMaxAge(7 * 24 * 60 * 60); // 7일
        cookie.setPath("/");
        
        // 쿠키를 클라이언트에게 전송
        response.addCookie(cookie);
        
        return "setCookie";
    }
    
    @GetMapping("/getCookie")
    public String getCookie(HttpServletRequest request) {
        // 요청 헤더에서 쿠키 가져오기
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("username".equals(cookie.getName())) {
                    // 쿠키 값 사용
                    String username = cookie.getValue();
                    // ...
                }
            }
        }
        
        return "getCookie";
    }
}
  • Cookie를 생성 및 설정하여 `response.addCookie()`를 사용하여 클라이언트에게 Cookie를 전송합니다.
  • 클라이언트가 서버에 보낸 요청 헤더에서 `request.getCookies()`를 사용하여 Cookie를 가져옵니다.
  • 지정한 이름의 쿠키를 가져오고 싶다면 이와 관련해서 `@CookieValue`를 살펴보시기 바랍니다.

 

 


세션(Session)

  • `서버 측`에 상태 정보를 저장하는 객체입니다.
  • 클라이언트와 서버 간에 세션 ID를 주고받아 세션을 유지합니다.
  • 클라이언트가 최초로 서버에 접속하면 서버는 세션 ID를 생성하고 클라이언트에게 전달합니다.
  • 클라이언트는 이후 요청 시에 세션 ID를 포함하여 서버에 전송합니다. 세션 ID는 쿠키를 통해 전달됩니다.
  • 일정 시간 또는 세션 종료 시간이 지나면 세션이 만료되고 제거됩니다.
  • 클라이언트 측에서는 세션 ID만을 가지고 있으므로 보안에 상대적으로 안전합니다.
@Controller
public class SessionController {

    @GetMapping("/login")
    public String login(HttpSession session) {
        
        // 로그인 처리 로직
        
        session.setAttribute("username", "JohnDoe");
        
        return "login";
    }
    
    @GetMapping("/login/form")
    public String loginForm(HttpSession session) {
        // 세션에서 사용자 정보 가져오기
        String username = (String) session.getAttribute("username");
        
        return "form";
    }
}
반응형