정의

  • 클라이언트 단에 저장되는 작은 정보의 단위
  • 클라이언트에서 생성하고 저장될 수 있고, 서버 단에서 전송한 쿠키가 클라이언트에 저장될 수 있다.

이용 방법

  • 서버에서 클라이언트의 브라우저로 전송되어 사용자의 컴퓨터에 저장한다.
  • 저장된 쿠키는 다시 해당하는 웹 페이지에 접속할 때, 브라우저에서 서버로 쿠키를 전송한다.
  • 쿠키는 (name, value) 쌍으로 정보를 저장한다.
    • name-value 쌍 이외에도 도메인(Domain), 경로(Path), 유효기간(Max-Age, Expires), 보안(Secure), HttpOnly 속성을 저장할 수 있다.

쿠키는 그 수와 크기에 제한

  • 브라우저별로 제한 값을 다르게 가져간다.

javax.servlet.http.Cookie

서버에서 쿠키 생성, Response의 addCookie 메서드를 이용해 클라이언트에게 전송

Cookie cookie = new Cookie(name, value);
response.addCookie(cookie);
  • 쿠키는 (name, value) 쌍 정보를 입력하여 생성
  • 쿠키의 이름은 일반적으로 알파벳, 숫자, 언더바로 구성

클라이언트가 보낸 쿠키 정보 읽기

Cookie[] cookies = request.getCookies();
  • 쿠키 값이 없으면 null 반환
  • Cookie가 가지고 있는 getName()과 getValue() 메서드를 이용해서 원하는 쿠키정보를 찾아 사용

클라이언트에게 쿠키 삭제 요청

Cookie cookie = new Cookie("이름", null);
cookie.setMaxAge(0);
response.addCookie(cookie);
  • 쿠키를 삭제하는 명령은 따로 없지만 maxAge를 0으로 하는 같은 이름의 cookie를 설정하여 삭제가능

쿠키의 유효시간 설정

setMaxAge() 메서드

  • 인자는 유효기간을 나타내는 초 단위의 정수형
  • 만일 유효기간을 0으로 지정하면 쿠키의 삭제
  • 음수를 지정하면 브라우저가 종료될 때 쿠키가 삭제

유효기간을 10분으로 지정하려면

cookie.setMaxAge(10 * 60); // 초 단위 : 10분
// 1주일로 지정하려면 (7 * 24 * 60 * 60)로 설정

관련 메서드

|반환형|메서드 이름|메서드 기능|
|:---:|---------|---------|
|int|getMaxAge()|쿠키의 최대지속 시간을 초 단위로 지정 (-1일 경우 브라우저가 종료되면 쿠키 만료)|
|String|getName()|쿠키의 이름을 String으로 변환|
|String|getValue()|쿠키의 값을 String으로 반환|
|void|setValue(String newValue)|쿠키에 새로운 값을 설정할 때 사용|

@CookieValue 애노테이션 사용

  • 컨트롤러 메서드의 파라미터에서 CookieValue애노테이션을 사용함으로써 원하는 쿠키정보를 파라미터 변수에 담아 사용할 수 있다.
컨트롤러 메서드(@CookieValue(value="쿠키이름", required=false, defaultValue="기본값") String 변수명)

생각해보기

Q. 브라우저별로 웹 사이트당 정해진 쿠키 개수를 정한 이유

  • 쿠키에는 세션말고도 사용자에 대한 사용정보가 들어있을 수 있다. 따라서 해당 정보가 많아질 수록 취약할 수도 있을 것이다. 또한 쿠키의 저장은 클라이언트가 하기 때문에 한 페이지당 저장할 수 있는 수를 제한한 것 같다.
profile
Study Enjoy Love

0개의 댓글