웹 브라우저가 보관하고 있는 데이터로, 웹서버에 요청을 보낼 때 헤더에 담아서 전송한다.
웹 브라우저는 쿠키가 삭제되기 전까지 웹서버에 쿠키를 전송한다.
장단점
- 클라이언트의 일정 폴더에 정보를 저장하기 때문에 서버의 부하를 줄일수 있다.
- 쿠키에는 식별값이 있는데 수정시 식별값이 달라진다. 서버 또한 식별값을 가지고 있기 때문에 쿠키는 매번보내면서 가지고 있는 식별값과 같은지 확인한다.(서버가 쿠키를 다가지고 있는것보다 식별값만 가지고 같은지만 판단)
- 정보가 사용자 컴퓨터(로컬)에 저장되기 때문에 보안에 위협받을 수 있다.
- 데이터 저장 용량에 한계가 있다.(상대적으로 로컬에 한계가 있고, 서버는 덜 하다)
- 일반 사용자가 브라우저 내의 기능인 "쿠키 차단"을 했을 경우 쿠키는 무용지물이 된다.
1. 동작 방식
1) 쿠키 생성 : 웹서버에서 쿠키를 생성하고 쿠키에 응답 데이터를 담아서 웹 브라우저에 전송한다.
(세션보다 쿠키에 저장하는것이 대세!)
2) 쿠키 저장 : 웹 브라우저는 응답 데이터를 담고 있는 쿠키를 메모리나 파일로 저장한다.
3) 쿠키 전송 : 웹 브라우저는 쿠키 요청이 있을 때마다 웹 서버에 전송한다.
웹 서버는 쿠키를 사용해서 필요한 작업을 수행할 수 있다.
2. 쿠키 생성 및 사용 방식
1) 쿠키 생성 후 response 객체에 담아준다. (이미 쿠키 이름이 존재한다면 값 수정기능을 한다.)
// 쿠키 생성
Cookie cookie = new Cookie("쿠키 이름", "쿠키 값");
response.addCookie(cookie);
2) 쿠키 유무를 확인하고 쿠키의 값을 얻어온다.
String cookieCheck = request.getHeader("Cookie");
if(cookieCheck != null){ // 쿠키 확인
Cookie[] cookies = request.getCookie(); // 값 가져오기
for(Cookie cookie : cookies){
cookie.getName();
cookie.getValue();
}
}
3) 쿠키 삭제
// 쿠키 삭제
String cookieCheck = request.getHeader("Cookie");
if(cookieCheck != null){ // 쿠키 확인
Cookie[] cookies = request.getCookie(); // 값 가져오기
for(Cookie cookie : cookies){
cookie.setMaxAge(0); // 해당 쿠키 삭제
response.addCookie(cookie);
}
}
+ 통합 예제 (파일 4개 setCookie.jsp, getCookie1.jsp, getCookie2.jsp, delete_check)
//setCookie
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Cookie cookie = new Cookie("id", "apple");
response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 생성</title>
</head>
<body>
<h3>쿠키 생성</h3>
<a href="getCookie1.jsp">쿠키 전송</a>
</body>
</html>
//getCookie1
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 출력, 쿠키 수정</title>
</head>
<body>
<%
String cookie_check = request.getHeader("Cookie");
if(cookie_check != null){
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
if(cookie.getName().equals("id")){
%>
<p>아이디 : <%=cookie.getValue() %></p>
<%
}
}
for(Cookie cookie : cookies){
if(cookie.getName().equals("id")){
Cookie new_cookie = new Cookie("id", "banana");
response.addCookie(new_cookie);
break;
}
}
}
%>
<a href="getCookie2.jsp">변경된 쿠키 값 확인</a>
</body>
</html>
// getCookie2
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String cookie_check = request.getHeader("Cookie");
if(cookie_check != null){
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
if(cookie.getName().equals("id")){
%>
<p>아이디 : <%=cookie.getValue() %></p>
<%
}
}
for(Cookie cookie : cookies){
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
%>
<a href="delete_check.jsp">쿠키 삭제 확인</a>
</body>
</html>
// delete_check
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 삭제 확인</title>
</head>
<body>
<%
String cookie_check = request.getHeader("Cookie");
if(cookie_check == null){
%>
<p>쿠키가 삭제 되었습니다.</p>
<%
}else{
%>
<p>쿠키가 삭제되지 않았습니다. 기존 쿠키를 모두 지운 후 다시 시도해보세요!</p>
<%
}
%>
</body>
</html>
<실행 화면>
+) 세션
내장 객체로서 브라우저마다 한 개씩 존재하고, 고유한 sessionID 생성 후 정보를 추출한다.
장단점 : JDP에서만 접근할 수 있기 때문에 보안성이 좋고, 저장 용량의 한계가 거의 없다.
서버에 데이터를 저장하므로, 서버에 부하가 걸릴 수 있다.
* 쿠키보다 세션을 쓰는것이 더 안정적이고, 안전하지만 세션에 저장할 공간이 부족할 경우 쿠키가 사용된다.
'프로그래밍 공부 > JSP' 카테고리의 다른 글
[lesson] JSP - 자바빈즈(JAVABEANS) (2) | 2023.01.10 |
---|---|
[DoIt] JSP - 기본 데이터 전달(JSP -> Servlet) , get/post 전달방식 (0) | 2023.01.10 |
[lesson] JSP - 내장객체 (0) | 2023.01.10 |
[lesson] JSP - Ajax (Asynchronous Javascript and Xml) (0) | 2023.01.10 |
[lesson] JSP - 개요 (0) | 2021.09.08 |