본문 바로가기

JSP 웹 프로그래밍/수업내용

[JSP 웹 프로그래밍] 쿠키(cookie)

1. 쿠키의 개요

클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법

쿠키는 세션과 달리 상태 정보를 웹 서버가 아닌 클라이언트에 저장

 •예를 들어 어떤 웹 사이트를 처음 방문한 사용자가 로그인 인증을 하고 나면 아이디와 비밀번호를 기록한 쿠키가 만들어지고        그 다음부터 사용자가 그 웹 사이트에 접속하면 별도의 절차를 거치지 않고 쉽게 접속할 수 있음

클라이언트의 일정 폴더에 정보를 저장하기 때문에 웹 서버의 부하를 줄일 수 있다는 것이 장점

반면에 웹 브라우저가 접속했던 웹 사이트에 관한 정보와 개인 정보가 기록되기 때문에 보안에 문제가 있음

쿠키의 동작 과정

쿠키 생성 단계: 주로 웹 서버 측에서 생성. 생성된 쿠키는 응답 데이터에 저장되어 웹 브라우저에 전송됨

❷ 쿠키 저장 단계: 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에  보관. 쿠키는 종류에 따라 메모리나 파일로 저장됨

❸ 쿠키 전송 단계: 웹 브라우저는 한 번 저장된 쿠키를 요청이 있을 때마다 웹 서버에 전송. 웹 서버는 웹 브라우저가 전송한 쿠키       를 사용하여 필요한 작업수행할 수 있음.

 

 

Cookie 클래스의 메소드 종류

쿠키와 세션의 차이

 


2. 쿠키 생성

쿠키 생성

Cookie( ) 메소드를 사용

쿠키를 생성한 후에는 반드시 response 내장 객체의 addCookie( ) 메소드로 쿠키를 설정해야

첫 번째 매개변수 name은 쿠키를 식별하기 위한 이름

번째 매개변수 value는 쿠키 값

예제 [쿠키 생성하기 ]

더보기

Cookie01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
	<%
		// 클라이어트에 저장된 모든 쿠키 객체를 가져옴 
		Cookie[] cookies = request.getCookies();
	
		for(int i=0; i<cookies.length; i++) {
			//쿠키 이름 : 쿠키 값
			out.print("<p>" + cookies[i].getName() + ": " +
							  cookies[i].getValue() + "</p>");
		}
		out.print("<hr />");
		out.print("<p>세션 아이디 : " + session.getId() + "</p>");
	%>

	<!-- 
	   요청URI : cookie01_process.jsp
	   요청파라미터 : {id=a001,passwd=java}
	   요청방식 : post
	-->
	<form action="cookie01_process.jsp" method="post">
		<p>아 이 디 : <input type="text" id="id" placeholder="아이디" required/></p>
		<p>비밀번호 : <input type="password" id="passwd" placeholder="비밀번호" required/></p>
		<p><input type="submit" value="전송"/></p>
	</form>

</body>
</html>

 

 

 


3. 쿠키 정보

쿠키 객체 얻기

클라이언트에 저장된 모든 쿠키 객체를 가져오려면 request 내장 객체의 getCookies( ) 메소드를 사용

쿠키 객체가 여러 개일 때는 배열 형태로 가져옴

 

쿠키 객체의 정보 얻기

쿠키 객체를 얻어왔다면 이 쿠키 객체에 저장된 쿠키 이름과 값을 가져오기 위해 getName( ), getValue( ) 메소드를 사용

예제[쿠키겍체에 저장된 모든 쿠키값을 가져와 출력하기]

더보기

Cookie01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
   <%
      //클라이언트에 저장한 모든 쿠키 객체를 가져옴
      //처음 : JSESSIONID
        //요청후 : JESSIONID, userId, userPw
        //request : 요청정보(요청파라미터, 쿠키객체)
      Cookie[] cookies = request.getCookies();
   
      for(int i=0;i<cookies.length;i++){
         //쿠키 이름 : 쿠키 값
         out.print("<p>"+cookies[i].getName()+" : " + 
                     cookies[i].getValue()+"</p>");
      }
      out.print("<hr/>");
      out.print("<p>세션아이디 : "+ session.getId()+"</p>");
   %>
   
   <!-- 
      요청URI : cookie01_process.jsp
      요청파라미터 : {id=a001,passwd=java}
      요청방식 : post
    -->
   <form action="cookie01_process.jsp" method="post">
      <p>아 이 디 : <input type="text" name="id"
               placeholder="아이디" required/></p>
      <p>비밀번호 : <input type="password" name="passwd"
               placeholder="비밀번호" required/></p>
      <p><input type="submit" value="전송"/></p>
      <p><input type="button" value="쿠키 삭제" id="btnCookDel"/></p>
   </form>
</body>
</html>

 

Cookie03.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%
	//Cookie cookie_id = new Cookie("userId",user_id);
	//Cookie cookie_pw = new Cookie("userPd",user_pw);
	//+ JSESSIONID
	//요청 시 함께 툭툭 던져지는 request객체 안에 있는 쿠키들을 확인해보자
	Cookie[] cookies = request.getCookies();
	
	//현재 설정된 쿠키의 개수?
	out.print("현재 설정된 쿠키의 개수 : " + cookies.length + "<br />");
	out.print("<hr />");
	for(int i=0;i<cookies.length;i++){//i : 0, 1, 2
	   out.print("<p>쿠키["+i+"] : " + cookies[i] + "</p>");
	   // 쿠키 속성 이름
	   out.print("<p>설정된 쿠키의 속성 이름["+i+"] : " 
	         + cookies[i].getName() + "</p>");
	   //쿠키 속성 값
	   out.print("<p>설정된 쿠키의 값["+i+"] : " 
	         + cookies[i].getValue() + "</p>");
	   out.print("<hr />");
	}
	out.print("<p>세션ID : " + session.getId() + "</p>");
%>

4. 쿠키 삭제

쿠키 삭제

쿠키의 유효 기간을 결정하는 setMaxAge( ) 메소드에 유효 기간을 0으로 설정하여 쿠키를 삭제할 수 있음

setMaxAge( ) 메소드의 형식

 

예제[쿠키 겍체에 저장된 모든 쿠키 삭제하기]

더보기

Cookie01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/js/jquery.min.js"></script>
<title>Cookie</title>
</head>
<body>
   <%
      //클라이언트에 저장한 모든 쿠키 객체를 가져옴
      //처음 : JSESSIONID
        //요청후 : JESSIONID, userId, userPw
        //request : 요청정보(요청파라미터, 쿠키객체)
      Cookie[] cookies = request.getCookies();
   
      for(int i=0;i<cookies.length;i++){
         //쿠키 이름 : 쿠키 값
         out.print("<p>"+cookies[i].getName()+" : " + 
                     cookies[i].getValue()+"</p>");
      }
      out.print("<hr/>");
      out.print("<p>세션아이디 : "+ session.getId()+"</p>");
   %>
   
   <!-- 
      요청URI : cookie01_process.jsp
      요청파라미터 : {id=a001,passwd=java}
      요청방식 : post
    -->
   <form action="cookie01_process.jsp" method="post">
      <p>아 이 디 : <input type="text" name="id"
               placeholder="아이디" required/></p>
      <p>비밀번호 : <input type="password" name="passwd"
               placeholder="비밀번호" required/></p>
      <p><input type="submit" value="전송"/></p>
      <p><input type="button" value="쿠키 삭제" id="btnCookDel"/></p>
   </form>
</body>
</html>

 

Cookie03.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%
	//Cookie cookie_id = new Cookie("userId",user_id);
	//Cookie cookie_pw = new Cookie("userPd",user_pw);
	//+ JSESSIONID
	//요청 시 함께 툭툭 던져지는 request객체 안에 있는 쿠키들을 확인해보자
	Cookie[] cookies = request.getCookies();
	
	//현재 설정된 쿠키의 개수?
	out.print("현재 설정된 쿠키의 개수 : " + cookies.length + "<br />");
	out.print("<hr />");
	for(int i=0;i<cookies.length;i++){//i : 0, 1, 2
	   out.print("<p>쿠키["+i+"] : " + cookies[i] + "</p>");
	   // 쿠키 속성 이름
	   out.print("<p>설정된 쿠키의 속성 이름["+i+"] : " + cookies[i].getName() + "</p>");
	   //쿠키 속성 값
	   out.print("<p>설정된 쿠키의 값["+i+"] : " + cookies[i].getValue() + "</p>");
	   out.print("<hr />");
	   
	    //쿠키 삭제
		/*
		Cookie 클래스. 쿠키를 삭제하는 기능은 별도로 없음.
		쿠키를 더 유지할 필요가 없으면 쿠키의 유효 기간을 만료하면 됨
		쿠키의 유효 기간을 결정하는 setMaxAge() 메소드에 유효 기간을 0으로 설정하여
			 쿠키를 삭제할 수 있음
		*/
		cookies[i].setMaxAge(0);
	    response.addCookie(cookies[i]);
	}
	out.print("<p>세션ID : " + session.getId() + "</p>");	
%>

<<script type="text/javascript">
setTimeout(function(){
	location.href="/ch14/cookie01.jsp";
},5000);
</script>

참고자료

Ch14 쿠키.pptx
3.38MB