[Spring] 쿠키와 세션 다루기

지인·2023년 6월 22일
0

Spring

목록 보기
3/20

🐾 [Spring] 쿠키/세션/토큰(용어)


웹 브라우저에 저장된 쿠키

  • 개발자 도구에서 Application - Storage - Cookies 에 도메인 별로 저장되어 있는게 확인
  • 구성요소
    • Name (이름): 쿠키를 구별하는 데 사용되는 키 (중복될 수 없음)
    • Value (값): 쿠키의 값
    • Domain (도메인): 쿠키가 저장된 도메인
    • Path (경로): 쿠키가 사용되는 경로
    • Expires (만료기한): 쿠키의 만료기한 (만료기한 지나면 삭제)

🐰 쿠키 다루기

쿠키 생성

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

        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());
    }
}
  • new Cookie(AUTHORIZATION_HEADER, cookieValue);

    • Cookie에 저장될 Name과 Value를 생성자로 받는 Cookie 객체를 생성
  • setPath("/"), setMaxAge(30 * 60)

    • Path와 만료시간을 지정
  • 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의 Name")

    • Cookie의 Name 정보를 전달해주면 해당 정보를 토대로 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 저장소에 ‘JSESSIONID’라는 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;
}
  • req.getSession(false)

    • 세션이 존재할 경우 세션을 반환하고 없을 경우 null을 반환
  • session.getAttribute(”세션에 저장된 정보 Name”)

    • Name을 사용하여 세션에 저장된 Value를 가져온다.
profile
열쩡

0개의 댓글