쿠키
쿠키(Cookie)는 클라이언트의 상태와 정보를 유지하기 위한 기술입니다.
상태 정보를 클라이언트(주로 웹 브라우저)에 Key와 Value형태로 저장했다가 다음 요청 시 저장된 쿠키를 함께 전송합니다.
언제 방문했는지, 어떤 페이지를 클릭했는지, 어떤 상품을 구매했는지 등 다양한 정보를 기록해두었다가 사용자 맞춤 서비스, 광고, 웹 로그 분석, 서비스 속도 개선 등을 할 수 있습니다.
쿠기 표준은 쿠키를 만들 수 있는 개수와 크기의 제약을 두며 브라우저 마다 지원하는게 다릅니다.
쿠키 동작 메커니즘
- 클라이언트가 서버에 요청을 보내면
- 서버가 쿠키를 생성하여 HTTP 응답 헤더에 실어 클라이언트에 전송합니다.
- 클라이언트는 쿠키를 받아 저장해두고
- 클라이언트는 다음번 요청 시 저장해둔 쿠키를 HTTP 요청 헤더에 실어 보냅니다.
- 서버는 쿠키의 정보를 읽어 필요한 작업을 수행할 수 있습니다.
처음 클라이언트에 전송된 쿠키는 서버가 읽어올 수 없습니다. 따라서 페이지를 재접속해야 쿠키를 읽고 활용할 수 있습니다.
쿠키를 구성하는 속성
- 이름(name) : 쿠키를 구별하는 이름
- 값(value) : 쿠키에 저장할 실제 데이터
- 도메인(domain) : 쿠키를 적용할 도메인
- 경로(path) : 쿠키를 적용할 경로
- 유지 기간(max age) : 쿠키를 유지할 기간
쿠키를 생성할 때는 생성자를 사용해서 생성하기 때문에 이름을 변경하는 메서드가 없습니다. 즉 생성 후에는 이름을 변결할 수 없습니다.
new Cookie(String name, String value) //이름과 값을 받아 새로운 쿠키 생성
아래 예제는 쿠키를 생성하고 쿠키 값을 확인하는 JSP 예제입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head><title>Cookie</title></head>
<body>
<h2>1. 쿠키(Cookie) 설정</h2>
<%
Cookie cookie = new Cookie("myCookie", "쿠키맛나요"); // 쿠키 생성
cookie.setPath(request.getContextPath()); // 경로를 컨텍스트 루트로 설정
cookie.setMaxAge(3600); // 유지 기간을 1시간으로 설정
response.addCookie(cookie); // 응답 헤더에 쿠키 추가
Cookie cookie2 = new Cookie("Cookie2", "쿠키2");
cookie.setPath(request.getContextPath());
cookie.setMaxAge(10);
response.addCookie(cookie2);
%>
<h2>2. 쿠키 설정 직후 쿠키값 확인하기</h2>
<%
Cookie[] cookies = request.getCookies(); // 요청 헤더의 모든 쿠키 얻기
if (cookies!=null) {
for (Cookie c : cookies) { // 쿠키 각각의
String cookieName = c.getName(); // 쿠키 이름 얻기
String cookieValue = c.getValue(); // 쿠키 값 얻기
// 화면에 출력
out.println(String.format("%s : %s<br/>", cookieName, cookieValue));
}
}
%>
<h2>3. 페이지 이동 후 쿠키값 확인하기</h2>
<a href="CookieResult.jsp">
다음 페이지에서 쿠키값 확인하기
</a>
</body>
</html>
CookieResult.jsp 파일입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CookieResult.jsp</title>
</head>
<body>
<h2>쿠키값 확인하기(쿠키가 생성된 이후의 페이지)</h2>
<%
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
String cookieName = cookies[i].getName();
String cookieValue = cookies[i].getValue();
out.println(String.format("쿠키명 : %s - 쿠키값 : %s<br/>",
cookieName, cookieValue));
}
}
%>
</body>
</html>
위의 코드를 실행하면
만든 적 없는 JSESSIONID 쿠키는 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키로, 새로운 브라우저를 열면 자동으로 생성됩니다.
현재는 쿠키는 생성된 직후이기 때문에 쿠키를 확인할 수 없습니다.
클라이언트로부터 재요청을 받을 때 쿠키가 서버로 들어와 이때 내용을 확인할 수 있습니다.
다음 페이지에서 쿠키값 확인하기를 누르면, CookieResult.jsp 에 요청하면, 쿠키를 확인할 수 있습니다.
만든 쿠키가 잘 나오는 것을 확인할 수 있습니다.
쿠키를 삭제할 때는 쿠키를 빈 값으로 설정하고 유지 기간을 0으로 부여하면 됩니다.
쿠
'Web' 카테고리의 다른 글
Mac m1에서 자바 버전 변경하기(brew 사용) (2) | 2023.10.17 |
---|---|
세션(Session) with JSP (0) | 2023.08.18 |
JSP 내장 객체(Implicit Object) (0) | 2023.06.20 |
JSP 동작과 기본구조 및 용어 (0) | 2023.06.20 |