본문 바로가기

자바 웹 개발자가 될거야/JSP

[JSP] 쿠키 / 쿠키생성 / 쿠키전달 / 쿠키삭제

 

 

< 쿠키 >

 

 

- 서버의 형태를 유지하기 위해 등장

- 클라이언트(나)측에서 관리되는 정보 (세션은 서버측에서 관리)

- 브라우저 종료해도 생존기간동안은 데이터가 사라지지 않음

- 아이디 저장하기 같은 기능이 쿠키 사용하는 것

 

- 쿠키는 이름, 값, 유효기간, 도메인, 경로 등으로 구성

- 쿠키 이름은 알파벳, 숫자로 (공백, 괄호, 콤마 가능)

 

 

 

네이버 페이지에서 쿠키값 확인하기

 

- 네이버 페이지에서 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>

 

 

 

 

실행창 쿠키 이름과 값 확인
실행창 F12 눌러서 쿠키값 확인

 

 

실행화면

- 처음 실행했을 때 쿠키값을 생성안했기때문에 쿠키값에 이름이 뜨지 않음

 

쿠키 생성하여 이름 들고오기

 

- 쿠키값 생성 버튼 클릭하면 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