쿠키란?

- 쿠키는 클라이언트에 대한 정보를 클라이언트의 하드디스크에 저장한 text파일

- 쿠키는 텍스트 형태로 저장되기 때문에 변조, 복사 가능하여 보안성이 없다.

- 쿠키는 서버에서 사용자에게 편리한 기능을 제공하기 위해 많이 사용되고, 웹 브라우저에 의해 관리된다.

- 일반적으로 브라우저는 각 웹 서버 당 20개의 쿠키와 총 300개의 쿠키를 지원하며 쿠키 크기는 각각 4kb로 제한될 수 있다.

- 쿠키 정보는 javax.servlet.http.Cookie클래에 의해 관리 된다.

 

쿠키 설정하기

1) Cookie 객체를 생성한다. 생성자에 문자열로 쿠키이름과 값을 설정한다.

- 형식

 Cookie cookie = ew Cookie("key", "value");

- 이름과 값은 영수자와. 공백이나 다음 문자를 포함할 수 있다.

[] () = , " / ? @ : ;

2) setMaxAge(초) 메소드를 이용하여 쿠키 유효 기간을 초단위로 설정한다.

- 유료 기간을 설정하지 않으면 브라우저가 종료될 때까지 쿠키가 지속됨을 나타내는 -1 이다.

- 다음은 쿠키 유효시간을 24시간으로 설정한 예이다.

cookie.setMaxAge(60*60*24);

3) HTTP응답 헤더에 쿠키를 보낸다.

- HttpServletResponse 인터페이스의 addCookie() 메소드에 의해 HTTP 응답 헤더에 쿠키를 보낸다.

- JSP에서 쿠키를 설정하는 방법은 다음과 같다.

response.addCookie(cookie);

 

Cookie 유효 시간 설정

- setMaxAge(int expiry)메소드를 이요하여 유효시간 초 단위로 설정한다.

- expiry

음수 : 브라우저가 종료되면 쿠키가 제거된다.

0: 생성과 동시에 제거

양수 : 초 단위로 해당 시간만큼 유지된다.

설정하지 않은 경우 : 디폴트로 -1이 설정되어 브라우저가 종료할 때 까지 유효하다.

 

Cookie 설정 시 주의 사항

- 쿠키의 이름이나 값에 한글 등이 포함되는 경우 다음과 같이 java.net 패키지의 URLEncoder.encode()메소드를 이용하여 주소 형식으로 인코딩해야한다.

Cookie cookie = new Cookie("key", URLEncoder.encode("값", "utf-8");

- Cookie의 유효범위를 설정하지 않는 경우. 쿠키를 설정하는 페이지의 경로와 하위 경로에서만 접근가능하다. 

따라서 모든 경로에서 쿠키의 값을 반환 받을 경우에는 다음과 같이 유효 범위를 "/"로 설정한다.

cookie.setPath("/");

 

Cookie 가져오기 및 제거

- Cookie 가져오기

1) 쿠키를 가져오기 위해서는 HttpServletRequest 인터페이스의 getCookies()메소드를 이용해서 가져온다.

- getCookies() 메소드는 javax.servlet.http.Cookie객체의 배열을 반환한다.

- JSP 에서 쿠키 가져오기

Cookie []ck = request.getCookies();

2) 반환 받은 Cookie객체의 getName() 과 getValue() 메소드를 이용하여 쿠키를 가져 온다.

String name, value;
	if( ck!=null) {
		for(Cookie c : ck) {
			name = c.getName();
			value = c.getValue();
            			:
		}
	}

 

- Cookie 제거하기

쿠키 값을 제거하기 위해서는 쿠키에 대한 값을 지우고 유효기간을 만료시킨다.

JSP 에서 쿠키 제거 방법

Cookie cookie = new Cookie("제거할쿠키이름",null) // 쿠키 값 지우기

cookie.setMaxAge(0); // 유효시간 만료

response.addCookie(cookie): // HTTP 응답 헤더에 제거할 쿠키를 보낸다.

 

확인용 예제

더보기

cookieEx

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<h3>cookie 예제</h3>

<p>
	<a href="setCookie.jsp">쿠키설정</a>
	<a href="getCookie.jsp">쿠키확인</a>
	<a href="removeCookie.jsp">쿠키제거</a>
</p>

</body>
</html>

setCookie

<%@page import="java.net.URLEncoder"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
	// 쿠키 설정 : 서버가 클라이언트 컴퓨터에 정보를 저장
	// 쿠키의 유효시간을 설정하지 않으면(life cycle), 브라우저가 종료되면 쿠키도 제거된다.
	Cookie c1 = new Cookie("subject", "java"); // 쿠키이름, 쿠키값 생성자를 이용해서 객체생성. 쿠키는 String만 가능
	response.addCookie(c1);
	
	Cookie c2 = new Cookie("subject2", "spring");
	c2.setMaxAge(60 * 60); // 1시간 : 쿠키 유효시간(단위 : 초)
	response.addCookie(c2);
	
	// 한글을 쿠키로 설정할 경우에는 반드시 인코딩
	Cookie c3 = new Cookie("subject3", URLEncoder.encode("오라클", "utf-8") );
	c3.setMaxAge(-1); // -1 : 브라우저가 종료되면 쿠키도 제거
	response.addCookie(c3);
	
	// 쿠키는 기본적으로 쿠키를 설정한 경로에서만 접근할 수 있다.
	Cookie c4 = new Cookie("tel", "010-1111-1111");
	c4.setPath("/"); // 모든 경로에서 쿠키를 접근 할 수 있도록 설정
	response.addCookie(c4);
	
	Cookie c5 = new Cookie("age", "20"); // 쿠키는 문자열만 가능하다. 숫자도 따옴표형식으로 넣어야함.
	c5.setMaxAge(0); // 쿠키 생성과 동시에 제거(일반적으로 쿠키를 제거할 때 사용)
	response.addCookie(c5);
	
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<h3> 쿠키 설정 </h3>
<p>
	<a href="cookieEx.jsp">돌아가기</a>
</p>

</body>
</html>

getCookie

<%@page import="java.net.URLDecoder"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<h3>쿠키 가져오기 : 클라이언트 컴퓨터에 저장된 쿠키를 서버로 가져오기</h3>
<%
	Cookie[] cc = request.getCookies(); // 쿠키는 배열로 가져올 수 있따.
	if( cc != null ) {
		for(Cookie c:cc){
			String name = c.getName(); // 쿠키 이름
			String value = c.getValue(); // 쿠키 값
			if(name.equals("subject3")) {
				value = URLDecoder.decode(value, "utf-8");
			}
			
			out.print("<p>" + name + " : " + value + "</p>");
		}
	}
%>
<hr>

<p>
	<a href="cookieEx.jsp">돌아가기</a>
</p>

</body>
</html>

 

p1

<%@page import="java.net.URLEncoder"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
	Cookie c = new Cookie("sname1", URLEncoder.encode("컴퓨터", "utf-8") );
	response.addCookie(c);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<h3>컴퓨터</h3>
<p> 컴퓨터중 최고의 성능</p>
<p> 제조사 : 삼성 </p>
<p> 가격 : 1,000,000 </p>
<hr>
<p><a href="shop.jsp">돌아가기</a></p>
</body>
</html>

p2

<%@page import="java.net.URLEncoder"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
	Cookie c = new Cookie("sname2", URLEncoder.encode("핸드폰", "utf-8") );
	response.addCookie(c);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<h3>핸드폰</h3>
<p> 핸드폰중 최고의 성능</p>
<p> 제조사 : 삼성 </p>
<p> 가격 : 1,200,000 </p>
<hr>
<p><a href="shop.jsp">돌아가기</a></p>
</body>
</html>

p3

<%@page import="java.net.URLEncoder"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
	Cookie c = new Cookie("sname3", URLEncoder.encode("노트북", "utf-8") );
	response.addCookie(c);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

<h3>노트북</h3>
<p> 노트북중 최고의 성능</p>
<p> 제조사 : 삼성 </p>
<p> 가격 : 1,500,000 </p>
<hr>
<p><a href="shop.jsp">돌아가기</a></p>
</body>
</html>

+ Recent posts