쿠키(Cookie)
▷ 쿠키 : 클라이언트의 상태 정보를 유지하기 위한 기술
- 상태 정보를 클라이언트( 주로 웹 브라우저 )에 key와 value 값 형태로 저장했다가 다음 요청 시, 저장된 쿠키를 함께 전송
- 웹 서버는 브라우저가 전송한 쿠키로부터 필요한 데이터를 읽어들임
- 쿠키 표준(RFC 6265)
· 3000개까지 만들 수 있음
· 쿠키 하나의 최대 크기는 4096바이트
· 하나의 호스트나 도메인에서 최대 50개까지 만들 수 있음
- 쿠키로 저장할 수 있는 최대 용량은 대략 1.2MB
모든 브라우저가 표준을 그대로 따르지는 않으며, 대부분 이보다 적은 수만 지원
▷ 동작 메커니즘
❶ 클라이언트가 서버에 요청
❷ 서버가 쿠키 생성 → HTTP 응답 헤더에 실어 클라이언트에 전송
❸ 클라이언트는 쿠키를 받아 저장
( 이 시점에는 쿠키가 클라이언트에만 저장된 상태이므로 서버는 아직 쿠키를 사용할 수 없음 )
❹ 클라이언트는 다음 번 요청 시, 저장해둔 쿠키를 HTTP 요청 헤더에 실어 보냄
❺ 서버는 쿠키의 정보를 읽어 필요한 작업을 수행
▷ 쿠키를 구성하는 속성
- 이름(name) : 쿠키를 구별하는 이름
- 값(value) : 쿠키에 저장할 실제 데이터
- 도메인(domain) : 쿠키에 적용할 도메인
- 경로(path) : 쿠키를 적용할 경로
- 유지 기간(max age) : 쿠키를 유지할 기간
▷ 설정 메서드
- void setValue(String value) : 쿠키의 값을 설정
- void setDomain(String Domain) : 쿠키에 적용할 도메인을 설정
- 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을 반환 )
< 요약 >
- 쿠키는 생성자를 통해서만 생성할 수 있음
생성 후 쿠키 값은 변경할 수 있으나 쿠키 이름은 변경 불가
- setPath( ) 메서드로 적용할 경로를 설정
- setMaxAge( ) 메서드로 쿠키의 유지 기간을 설정
- response 내장 객체의 addCookie( ) 메서드로 클라이언트에 쿠키를 저장
※ 앞으로 JSP 작업을 할 때 <!DOCTYPE html>를 기준으로 나누자
① 처리 영역 : Java 코드
② View 영역 : 표현식 / 일반 <html> 코드 / 출력 부분 등
▷ cookieset.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 처리 영역
// ① 서버에서 쿠키 생성 : 생성자 이용
Cookie cookie = new Cookie("cookieName", "cookieValue");
// ② 쿠키의 만료시간 설정 : setMaxAge( 초 * 분 )
cookie.setMaxAge(60 * 10); // 만료시간 : 10분
// ③ response 객체에 저장 : addCookie(생성된쿠키객체)
// → response 객체가 웹 브라우저로 전송되면
// 웹 브라우저의 쿠키 저장공간에 파일이 생성됨
response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- 위에서 생성한 쿠키의 내용을 읽어오는 스크립트 링크 연결 --%>
<a href="cookieget.jsp">쿠키 읽어오기</a>
</body>
</html>
▷ cookieget.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 쿠키 읽어오는 처리
// ① 생성된 쿠키를 배열로 읽기 ( 생성된 쿠키가 여러 개라는 가정 )
Cookie[] cookies = request.getCookies();
// ② 읽어온 쿠키 출력 : 루프 이용
for (int i = 0; i < cookies.length; i++){
// ②-❶ i번째 쿠키의 key이름 가져오기
String str = cookies[i].getName();
// ②-❷ str에 저장되어 있는 쿠키 중에 cookieName이 있는지 비교
if (str.equals("cookieName")){
out.println(
"cookie[" + i + "] name : " +
cookies[i].getName());
out.println(
"cookie[" + i + "] value : " +
cookies[i].getValue());
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<br />
<a href="cookiedelete.jsp">쿠키 삭제하기</a>
</body>
</html>
▷ cookiedelete.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 쿠키 삭제 구현 : 쿠키의 만료시간을 0초로 설정하자
// ① 현재 request 객체의 모든 쿠키 읽기
Cookie[] cookies = request.getCookies();
//② 읽어온 쿠키 출력 : 루프 이용
for (int i = 0; i < cookies.length; i++){
// 원하는 쿠키만 삭제해보자
// ②-❶ i번째 쿠키의 key이름 가져오기
String str = cookies[i].getName();
// ②-❷ 실제 삭제할 쿠키의 key이름인지 비교
if(str.equals("cookieName")){
// 쿠키 삭제하기 전에 쿠키 내용 출력
out.println("쿠키의 이름 : " + cookies[i].getName() + "<br />");
// 이제 해당 쿠키를 삭제해보자
cookies[i].setMaxAge(0);
// 삭제된 쿠키(만료 설정된 쿠키)를 다시 request 객체에 추가
response.addCookie(cookies[i]);
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<br />
<a href="cookietest.jsp">쿠키 확인하기</a>
</body>
</html>
▷ cookietest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 삭제된 쿠키 확인
// ① 현재 request 객체의 모든 쿠키 읽기
Cookie[] cookies = request.getCookies();
//② 읽어온 쿠키 출력 : 루프 이용
for(int i = 0; i < cookies.length; i++){
out.println(
"cookies[" + i + "] name : " +
cookies[i].getName());
out.println(
"cookies[" + i + "] value : " +
cookies[i].getValue());
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<br />
<a href="cookieset.jsp">쿠키 생성하기</a>
<a href="cookieget.jsp">쿠키 가져오기</a>
<a href="cookiedelete.jsp">쿠키 삭제하기</a>
</body>
</html>
▶ 직접 서버에 cookieset.jsp 요청해보자.
- 개발자 도구에서 삭제되는 과정 확인하기
'백엔드 > JSP' 카테고리의 다른 글
JSP Servlet 기초 (8) : Session (0) | 2023.06.13 |
---|---|
JSP Servlet 기초 (7) : 쿠키를 이용한 로그인 (0) | 2023.06.13 |
JSP Servlet 기초 (5) : response 객체 (0) | 2023.06.12 |
JSP Servlet 기초 (4) : request + tag (0) | 2023.06.12 |
JSP Servlet 기초 (3) : JSP 태그 (0) | 2023.06.11 |