Spring
스파르타 부트캠프 Spring Master 3강 쿠키와 세션이란
H.S-Backend
2024. 5. 24. 17:07
반응형
쿠키란
클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일이다.
구성요소
- Name(이름) : 쿠키를 구별할 때 사용되는 키( 중복x)
- Value(값) : 쿠키의 값
- Domain(도메인): 쿠키가 저장된 도메인
- Path(경로) : 쿠키가 사용되는 경로
- Expires(만료기한 ) : 쿠키의 만료기한(만료기한 지나면 삭제된다)
세션이란
서버에서 일정시간 동안 클라이언트 상태를 유지하기위해 사용된다.
서버에서 클라이언트 별 유일무이한 세션 ID를 부여하고
클라이언트 별로 필요한 정보를 서버에 저장한다.
서버에서 생성한 세션ID는
클라이언트의 쿠키값(세션쿠키)으로 저장되어
클라이언트 식별에 사용된다.
세션 동작 방식(서버는 세션ID를 사용하여 세션을 유지)
- 클라이언트가 서버에 1번요청을하면
- 서버가 세션ID를 생성하고 쿠키에 담아서 응답 헤더에 전달한다 EX) 형태는 SESSIONID = 12A345
- 클라이언트가 쿠키에 세션ID를 저장한다(세션쿠키 안에 속해있다)
- 클라이언트가 서버에 2번을 요청하면 (쿠키와 세션ID포함해서 요청)
- 서버가 세션 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;
}
- req.getSession(false)
- 세션이 존재하다면 세션을 반환하고 없다면 Null을 반환한다.
- session.getAttribute(세션에 저장될 Name)
- Name을 상요하여 세션에 저장된 Value를 가져온다.
반응형