쿠키란?
- 쿠키는 클라이언트에 대한 정보를 클라이언트의 하드디스크에 저장한 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>
'쌍용강북교육센터 > 10월' 카테고리의 다른 글
1022_JSP/Servlet : 파일처리 (0) | 2021.10.25 |
---|---|
1021_JSP/Servlet : 세션 Session (0) | 2021.10.25 |
1018~1019_JSP/Servlet : 자유게시판 만들기 :: ★중요★흐름, 파라미터생각해보기 (0) | 2021.10.20 |
1018_JSP/Servlet : 게시판 페이징 처리 클래스만들기 // 복습 (0) | 2021.10.20 |
1014_JSP/Servlet : Servlet을 이용해서 간단한 인사관리 페이지 만들기 (0) | 2021.10.19 |