< 쿠키 >
- 서버의 형태를 유지하기 위해 등장
- 클라이언트(나)측에서 관리되는 정보 (세션은 서버측에서 관리)
- 브라우저 종료해도 생존기간동안은 데이터가 사라지지 않음
- 아이디 저장하기 같은 기능이 쿠키 사용하는 것
- 쿠키는 이름, 값, 유효기간, 도메인, 경로 등으로 구성
- 쿠키 이름은 알파벳, 숫자로 (공백, 괄호, 콤마 가능)
- 네이버 페이지에서 F12번 - 네트워크 탭 - F5번 - 맨 위 네이버 url 클릭 - 오른쪽 Cookie탭 클릭
- Cookie 탭에서 테이블의 열 이름을 보면 쿠키 구성요소들을 볼 수 있다
① 쿠키(객체) 생성
- Cookie cookie = new Cookie("이름", "값"); 으로 생성
- Cookie 치면 맨 위에 나오는 javax 선택
② 쿠키 설정값 지정
- cookie.setMaxAge(args); // 유효기간
- cookie.setPath(args); // 경로
- cookie.setValue(args); // 값
- cookie.setDomain(args); // 도메인
③ 쿠키 정보를 전달
- 응답정보에 담아서 쿠키 전달
- response.addCookie(쿠키이름);
④ 쿠키정보 가져오기
- 쿠키값은 (이름, 값)의 형태로 배열로 가져와야함
- Cookie[] cookies = request.getCookies();
⑤ 쿠키 정보 저장
- 반복문 사용해서 쿠키의 이름과 값을 저장해주기
- cookies[i].getName(); → 이름
- cookies[i].getValue(); → 값
< 쿠키 생성하고 쿠키이름 삭제해보기 >
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 요청정보에 있는 쿠키값을 가져오기
Cookie[] cookies = request.getCookies();
String name="";
String value="";
// 반복문을 사용하여 배열의 처음부터 끝까지 접근
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("name")){
name = cookies[i].getName();
value = cookies[i].getValue();
}
}
%>
<h3>쿠키값 : <%=cookies[0].getValue() %></h3> <!-- name 쿠키값 찾기 -->
<input type="button" value = "쿠키값 생성" onclick="location.href='cookieSet.jsp';">
<input type="button" value = "쿠키값 삭제" onclick="location.href='cookieDel.jsp';">
</body>
</html>
//cookieTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 쿠키값 생성(서블릿 API 사용)
Cookie cookie = new Cookie("name", "GOOGLE");
// 쿠키 설정값 지정
cookie.setMaxAge(600); //600초 (10분)
// 쿠키정보를 전달(응답정보에 담아서)
response.addCookie(cookie);
%>
<script type="text/javascript">
alert('쿠키값 생성후 페이지 이동!');
location.href="cookieTest.jsp";
</script>
</body>
</html>
//cookieSet.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 쿠키정보를 받아오기 (요청정보) 현재상태 쿠키 다 들고오기
Cookie[] cookies = request.getCookies();
// 배열을 전체 돌면서 'name' 쿠키값을 사용 -> 쿠키값 삭제
if(cookies != null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("name")){
// 쿠키값 삭제 - 유효기간 0초로 해서
cookies[i].setMaxAge(0);
// 클라이언트 정보(쿠키)를 저장(local host)
response.addCookie(cookies[i]);
}
}
}
// 쿠키 데이터가 있을 때, 배열을 돌면서 처음부터 끝까지
// name 쿠키정보 확인 -> 쿠키값 삭제
%>
<script type="text/javascript">
alert('쿠키값 삭제!');
location.href="cookieTest.jsp";
</script>
</body>
</html>
- 처음 실행했을 때 쿠키값을 생성안했기때문에 쿠키값에 이름이 뜨지 않음
- 쿠키값 생성 버튼 클릭하면 cookieSet.jsp에서 생성했던 쿠키이름 출력됨
- 쿠키값 삭제버튼 누르면 쿠키이름 없어지고 쿠키값 다시 등장
< 언어에 따른 반응 다르게 하기 >
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String lang = "";
// 1) 쿠키값 가져오기(요청정보-request)
Cookie[] cookies = request.getCookies();
// 2) 쿠키값이 있을 때, 쿠키 이름이 "lang"인 대상의 값을 꺼내서 사용
if(cookies != null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("lang")){ // 여기 lang은 쿠키이름
lang = cookies[i].getValue(); // 여기 lang은 저장하기 위한 변수
}
}
}
// 3) 한국어면 - "안녕하세요 쿠키연습중", 영어면 "Hello CookieTesting" 화면출력하기
if(lang.equals("korea")){
out.println("안녕하세요 쿠키연습중 <br>");
}else{
out.println("Hello CookieTesting <br>");
}
//* 쿠키가 없는 상태에서는 기본값 '한국어'로 처리
//* 해당 언어에 맞게 라디오버튼 선택되어있도록
%>
<form action="cookiePro.jsp" method="post">
<input type="radio" name="language" value="korea"
<%if(lang.equals("korea")){ %>
checked
<%} %>
>한국어
<input type="radio" name="language" value="english"
<%if(lang.equals("english")){ %>
checked
<%} %>
>영어
<br>
<input type="submit" value="언어 설정하기">
</form>
</body>
</html>
//cookieForm.jsp
- form태그 안 라디오버튼 value를 각 언어에 맞게 지정하고 <%%> 사용해서 조건 설정했음
- checked : 라디오 버튼 선택되는 기능
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 1) cookieForm.jsp 페이지에서 전달된 정보를 저장
String language = request.getParameter("language");
// 2) 그 정보를 사용해서 쿠키값으로 생성, 쿠키값 이름 "lang"
Cookie cookie = new Cookie("lang",language);
// 3) 쿠키 설정값 - 사용시간 1시간
cookie.setMaxAge(3600);
// 4) 클라이언트 응답정보에 저장해서 전달
response.addCookie(cookie);
// 5) js 사용페이지 이동 (cookieForm.jsp 이동)
%>
<script type="text/javascript">
alert('언어 정보 생성완료!');
location.href='cookieForm.jsp';
</script>
</body>
</html>
//cookiePro.jsp
※ 요청 시점에 따라 request와 response 사용이 다른데 잘모르면 아래처럼 외우기 .. (물론 예외 있음)
- 쿠키 만들어서 보낼 때 response
- 쿠키 받아올 때는 request