쿠키
쿠키란 클라이언트의 상태 정보를 유지하기 위한 기술이다.
상태 정보를 클라이언트에 키와 값 형태로 저장한다.
- 쿠키는 3000개까지 만들 수 있다. (하지만 대부분 100개 만 만들어도 서버는 버벅거린다.)
- 쿠키 하나의 최대 크기는 4096바이트이다.
- 하나의 호스트나 도메인에서 최대 50개까지 만들 수 있다.
동작 메커니즘
- 클라이언트가 서버에 요청을 보낸다.
- 서버가 쿠키를 생성하여 HTTP 응답 헤더에 실어 클라이언트에 전송한다.
- 클라이언트는 쿠키를 받아 저장한다. (이 시점에서 쿠키가 클라이언트에만 저장된 상태이므로 서버는 아직 쿠키를 사용할 수 없다.)
- 클라이언트는 다음번 요청 시 저장해둔 쿠키를 HTTP 요청 헤더에 실어 보낸다.
- 서버는 쿠키의 정보를 읽어 필요한 작업을 수행한다.
쿠키의 속성과 API
속성
- 이름: 쿠키를 구별하는 이름
- 값: 쿠키에 저장할 실제 데이터
- 고메인: 쿠키를 적용할 도메인
- 경로: 쿠키를 적용할 경로
- 유지 기간: 쿠키를 유지할 기간
설정 메서드
- void setValue(String value): 쿠키의 값을 설정한다. (쉼표(,)나 세미콜론(;)같은 문자는 포함할 수 없다.)
- void setDomain(String domain): 쿠키에 적용할 도메인을 설정한다. 주 도메인만 적용하고 싶다면 "도메인" 형태로 기술한다. 만약 서브 도메인에도 적용하고 싶다면 ".도메인" 형태로 기술한다.
ex) setDomain(".helllo.co.kr")로 설정하면 www.hello.co.kr은 물론 mail.hello.co.kr등에도 쿠키가 적용된다. - void setPath(String path): 쿠키가 적용될 경로를 지정한다. 지정한 경로와 그 하위 경로에 까지 적용된다.
- void setMaxAge(int expire_seconds): 쿠키가 유지될 기간을 초 단위로 설정한다. 기간을 설정하지 않으면 웹 브라우저가 닫힐 때 쿠키도 같이 삭제된다.
(키의 이름은 생성자를 통해 설정하고 생성 후에는 더 이상 이름을 변경할 수 없다.) - new Cookie(String name, String value): 이름과 값을 받아 새로운 쿠키를 생성한다.
쿠키 정보를 읽는 메서드
- String getName(): 쿠키의 이름을 반환한다.
- String getValue(): 쿠키의 값을 반환한다.
- String getDomain(): 쿠키가 적용되는 도메인을 반환한다.
- String getPath(): 쿠키의 적용 경로를 반환한다. 단, setPath()로 설정한 적이 없다면 null을 반환한다.
- int getMaxAge(): 쿠키의 유지 기간을 반환한다. 단, setMaxAge()로 설정한 적이 없다면 -1을 반환한다.
쿠키는 생성 직후에는 사용할 수 없다.
클라이언트로부터 재요청이 들어올 때 요청 헤더를 통해 쿠기가 서버로 전송되는데 이때부터 내용을 읽을 수 있다.
그리고 실행을 하면 JESSIONID라는 쿠키를 볼 수 있다.
이 쿠키는 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키로, 새로운 웹브라우저를 열면 자동으로 생성된다.
쿠키 관리자
쿠키를 읽을 때는 쿠키를 배열로 가져오기 때문에 반복문과 조건문이 필요하다.
그래서 쿠키를 편리하게 사용할 수 있게 도와주는 클래스를 만들 수 있다.
package com.example.chunjaejpa;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CookieManager {
public static void makeCookie(HttpServletResponse response, String cName, String cValue, int cTime) {
Cookie cookie = new Cookie(cName, cValue);
cookie.setPath("/");
cookie.setMaxAge(cTime);
response.addCookie(cookie);
}
public static String readCookie(HttpServletRequest request, String cName) {
String cookieValue = "";
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
String cookieName = c.getName();
if (cookieName.equals(cName)) {
cookieValue = c.getValue();
}
}
}
return cookieValue;
}
public static void deleteCookie(HttpServletResponse response, String cName) {
makeCookie(response, cName, "", 0);
}
}
- makeCookie() 메서드는 총 네 개의 매개변수를 받아 쿠키를 만들어 응답 헤더에 추가해 준다.
1. 쿠키를 생성한다.
2. 경로와 유지기간을 설정한다.
3. 응답 헤더에 추가해 클라이언트로 쿠키를 전송한다. - readCookie() 메서드는 명시한 쿠키의 값을 읽어 반환한다.
이 메서드는 request 내장 객체로부터 클라이언트가 보내온 쿠키 목록을 받아서, cName과 이름이 같은 쿠키가 있다면 그 값을 반환한다. - deleteCookie() 메서드는 주어진 이름의 기존 쿠키를 삭제한다.
쿠키를 이용해 팝업창을 제어하고 로그인 아이디를 저장하고 오늘 본 생춤을 기억한다거나, 게시글 조회수를 하루에 1만 증가시키는 등의 기능을 구현할 수 있다.
핵심 요약
- 쿠키는 생성자를 통해서만 생성할 수 있다. 생성 후 쿠키값은 변경할 수 있으나 쿠키명은 변경할 수 없다.
- setPath() 메서드로 적용할 경로를 설정한다.
- setMaxAge() 메서드로 쿠키의 유지 기간을 설정한다.
- response 내장 객체의 addCookie() 메서드로 클라이언트에 쿠키를 저장한다.
- 쿠키는 생성 직후 바로 사용할 수 없다. 클라이언트가 재요청을 했을 때부터 사용이 가능하다.
'🤓천재교육 풀스택 1기 노트' 카테고리의 다른 글
JSP 세션 (0) | 2023.08.02 |
---|---|
JSP 지시어와 스크립트 요소 (0) | 2023.07.30 |
JSP 기본 (0) | 2023.07.30 |
천재교육 풀스택1기 과정 JSP Section1. 서블릿, 자바 웹 기술의 새 지평을 열다. (3) | 2023.07.28 |
천재교육 풀스택과정 1기 DAY17 (0) | 2023.06.05 |