Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 부트캠프 Spring Master 3강 쿠키와 세션이란 본문

Spring

스파르타 부트캠프 Spring Master 3강 쿠키와 세션이란

H.S-Backend 2024. 5. 24. 17:07

쿠키란

클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일이다.

 

 

구성요소

  • Name(이름) : 쿠키를 구별할 때 사용되는 키( 중복x)
  • Value(값) : 쿠키의 값
  • Domain(도메인): 쿠키가 저장된 도메인
  • Path(경로) : 쿠키가 사용되는 경로
  • Expires(만료기한 ) : 쿠키의 만료기한(만료기한 지나면 삭제된다)

세션이란

서버에서 일정시간 동안 클라이언트 상태를 유지하기위해 사용된다.

 

서버에서 클라이언트 별 유일무이한 세션 ID를 부여하고

클라이언트 별로 필요한 정보를 서버에 저장한다.

 

서버에서 생성한 세션ID는
클라이언트의 쿠키값(세션쿠키)으로 저장되어
클라이언트 식별에 사용된다.

세션 동작 방식(서버는 세션ID를 사용하여 세션을 유지)

  1. 클라이언트가 서버에 1번요청을하면
  2. 서버가 세션ID를 생성하고 쿠키에 담아서 응답 헤더에 전달한다 EX) 형태는 SESSIONID = 12A345
  3. 클라이언트가 쿠키에 세션ID를 저장한다(세션쿠키 안에 속해있다)
  4. 클라이언트가 서버에 2번을 요청하면 (쿠키와 세션ID포함해서 요청)
  5. 서버가 세션 ID를 확인하여 1번요청과 같은 클라이언트임을 인지할 수 있다.(쿠키의 세션ID 역할)

 


쿠키 생성 코드

public static void addCookie(String cookieValue, HttpServletResponse res) {
    try {
        // Cookie Value 에는 공백이 불가능해서 encoding 진행
        cookieValue = URLEncoder.encode(cookieValue, "utf-8").replaceAll("\\+", "%20");

        Cookie cookie = new Cookie(AUTHORIZATION_HEADER, cookieValue); // Name-Value
        cookie.setPath("/");
        //만료기한
        cookie.setMaxAge(30 * 60);

        // Response 객체에 Cookie 추가
        res.addCookie(cookie);
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e.getMessage());
    }
}

Cookie에 저장될 Name과 Value를 생성자로 받는 Cookie객체 생성 코드

Cookie cookie = new Cookie(AUTHORIZATION_HEADER, cookieValue);

Path와 만료시간 지정하는 코드

cookie.setPath("/");
//만료기한
cookie.setMaxAge(30 * 60);
  • HttpServletResponse객체에 생성한 Cookie객체를 추가하여 브라우저로 반환한다.
  • 반환된 Cookie는 브라우저의 Cookie저장소에 저장된다.
  • Cookie생성은 범용적으로 사용될 수 있어 static (공용) 메서드로 선언

쿠키 읽는 코드

@GetMapping("/get-cookie")
public String getCookie(@CookieValue(AUTHORIZATION_HEADER) String value) {
    System.out.println("value = " + value);

    return "getCookie : " + value;
}

@CookieValue(Cookie의 이름)

위와 같이 어노테이션을 사용하고 인풋에있는 이름을 전달해주면 

입력된 정보를 토대로 Cookie의 Value를 가져온다.


Servlet에서는

유일무이한 세션 ID를 간편하게 만들 수 있는

HttpSession을 제공한다.

 

HttpSession 생성 코드

@GetMapping("/create-session")
public String createSession(HttpServletRequest req) {
    // 세션이 존재할 경우 세션 반환, 없을 경우 새로운 세션을 생성한 후 반환
    HttpSession session = req.getSession(true);

    // 세션에 저장될 정보 Name - Value 를 추가합니다.
    session.setAttribute(AUTHORIZATION_HEADER, "Robbie Auth");

    return "createSession";
}
  • HttpServletRequest 를 사용하여 세션을 생성 및 반환 할 수 있다.
  • req.getSession(true)
  • 세션이 존재할 경우 세션을 반환하고 없다면 새로운 세션을 생성한다.
  • 세션에 저장할 정보를 Name-Value형식으로 추가하고

 

위와같이 Cookie저장소에

JESSEIONID라는 Name으로 Value에 저장된다.


HttpSession읽는 코드

@GetMapping("/get-session")
public String getSession(HttpServletRequest req) {
    // 세션이 존재할 경우 세션 반환, 없을 경우 null 반환
    HttpSession session = req.getSession(false);

    String value = (String) session.getAttribute(AUTHORIZATION_HEADER); // 가져온 세션에 저장된 Value 를 Name 을 사용하여 가져옵니다.
    System.out.println("value = " + value);

    return "getSession : " + value;
}
  1. req.getSession(false)
  2. 세션이 존재하다면 세션을 반환하고 없다면 Null을 반환한다.
  3. session.getAttribute(세션에 저장될 Name)
  4. Name을 상요하여 세션에 저장된 Value를 가져온다.

 

 

반응형