Dev/JSP & Servlet

쿠키의 개요, 생성, 전달, 삭제

창문닦이 2019. 2. 28. 15:24

Cookie

- 웹사이트에 접속할 때 생성되는 정보를 담은 임시파일

- 쿠키는 데이터베이스에 저장되는 것이 아니라 사용자의 pc에 저장됨

- 쿠키정보는 서버에 저장하지 않고 클라이언트의 컴에 저장 한글의 경우 깨질 수 있어 인코딩 작업이 필요함.

Cookie 조회 방법


Cookie 생성 

쿠키는 사용자가 웹서버에 요청을 할때 request객체에 담겨 웹서버에 전달된다. 이때 웹서버는 전달된 쿠키의 값을 통해 같은 웹브라우저에서 온 요청인지 판별이 가능하다.

c1.jsp

<%@page import="java.net.URLEncoder"%>

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

//쿠키에 데이터를 저장(쿠키이름, 쿠키값)

//쿠키정보는 서버에 저장하지 않고 클라이언트의 컴에 저장

Cookie c1 = new Cookie("name","suzi");

Cookie c2 = new Cookie("age","25");

Cookie c3 = new Cookie("addr",URLEncoder.encode("서울","UTF-8"));

//서버에서 클라이언트에게 쿠키를 전달하므로 response

response.addCookie(c1);

response.addCookie(c2);

response.addCookie(c3);

%>

<!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>

<a href="c2.jsp">쿠키</a>

</body>

</html>

Cookie 읽어오기

c2.jsp

<%@page import="java.net.URLDecoder"%>

<%@page import="java.net.URLEncoder"%>

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

//쿠키 받아오기(쿠키가 여러개 이므로 배열로 받음)

Cookie[] c = request.getCookies();

%>

<!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>

<%

//쿠키가 있을때만 실행

if(c!=null){

for(Cookie cc : c){

//내장객체 이용하여 출력

out.print("쿠키이름: ");

out.print(cc.getName());

out.print(", 쿠키값: ");

String str = cc.getValue();

if(cc.getName().equals("addr")){

str = URLDecoder.decode(str,"UTF-8");//한글의 경우 깨질수 있으므로 디코더 사용

}

out.print(str+"<br/>");

}

}

%>

</body>

</html>

Cookie 유효시간 설정 (setMaxAge), 접근경로 설정(setPath)

c3.jsp

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

//쿠키 생성

Cookie c1 = new Cookie("name","shin");

Cookie c2 = new Cookie("age","30");

Cookie c3 = new Cookie("addr","Pusan");

Cookie c4 = new Cookie("tel","010-1234-1234");

//쿠키도 유효기간이 존재한다(설정 가능)

c1.setMaxAge(0); //바로 지워짐

c2.setMaxAge(-1);//끝까지 유지

c3.setMaxAge(10);//10초후 삭제

//c2.setPath("/");//프로젝트내 어느 페이지에서든 접근 가능

//c4.setPath("/board");//board에서만 접근 가능

//쿠키 전달

response.addCookie(c1);

response.addCookie(c2);

response.addCookie(c3);

response.addCookie(c4);

%>

<!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>

<a href="c4.jsp">확인</a>

</body>

</html>

Cookie 삭제 

c4.jsp

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

//쿠키 지우기

Cookie c4 = new Cookie("tel",null);

response.addCookie(c4);

//쿠키 받음

Cookie[] ck = request.getCookies();

%>

<!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>

<%

if(ck!=null){

for(Cookie c : ck){

out.print("쿠키이름: ");

out.print(c.getName());

out.print(" ,쿠키값: ");

out.print(c.getValue()+"<br/>");

}

}

%>

</body>

</html>


Cookie를 활용한 상품목록조회 

shop.jsp

<%@page import="java.net.URLDecoder"%>

<%@page import="java.net.URLEncoder"%>

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

//쿠키 읽음

Cookie[] ck = request.getCookies();

%>

<!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>상품목록조회</title>

</head>

<body>

<table border="1" width="400" cellpadding="0" cellspacing="0">

<tr>

<th>상품명</th>

<th>상품가격</th>

</tr>

<tr>

<td><a href="p1.jsp">냉장고</a></td>

<td>1000</td>

</tr>

<tr>

<td><a href="p2.jsp">세탁기</a></td>

<td>2000</td>

</tr>

<tr>

<td><a href="p3.jsp">LEDTV</a></td>

<td>3000</td>

</tr>

</table>

<br/>

<hr align="left" width="400" color="red"/>

오늘본 상품 목록<br/>

<%

if(ck!=null){

for(int i=ck.length-1;i>=0;i--){

if(ck[i].getName().indexOf("productName")!=-1){

%>

<%=URLDecoder.decode(ck[i].getValue(),"UTF-8")%><br/>

<%

out.print("<img width='100'src='./image/"+URLDecoder.decode(ck[i].getValue(),"UTF-8")+".jpg'/><br/>");

                                이미지 태그 작성할 때 쿠키의 value값을 이용하여 출력

}

}

}

%>

</body>

</html>


상품조회를 하지 않은 상태


상품 조회 후 페이지

냉장고 페이지(p1.jsp)

p1.jsp

<%@page import="java.net.URLEncoder"%>

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

//쿠키 생성

Cookie c = new Cookie("productName1", URLEncoder.encode("냉장고","UTF-8"));

c.setMaxAge(10);

response.addCookie(c);

%>

<!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>냉장고페이지</title>

</head>

<body>

잘얼어 냉장고 <br/>

<img alt="냉장고" src="./image/냉장고.jpg"/><br/>

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

</body>

</html>


세탁기 페이지(p2.jsp)

p2.jsp

<%@page import="java.net.URLEncoder"%>

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

//쿠키 생성

Cookie c = new Cookie("productName2", URLEncoder.encode("세탁기","UTF-8"));

c.setMaxAge(10);

response.addCookie(c);

%>

<!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>세탁기페이지</title>

</head>

<body>

깨끗해 세탁기 <br/>

<img alt="세탁기" src="./image/세탁기.jpg"/><br/>

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

</body>

</html>

TV 페이지(p3.jsp)

p3.jsp

<%@page import="java.net.URLEncoder"%>

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

//쿠키 생성

Cookie c = new Cookie("productName3", URLEncoder.encode("LEDTV","UTF-8"));

c.setMaxAge(10);

response.addCookie(c);

%>

<!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>TV페이지</title>

</head>

<body>

잘보여 LEDTV <br/>

<img alt="LEDTV" src="./image/LEDTV.jpg"/><br/>

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

</body>

</html>

쿠키를 활용한 팝업창 만들기 예제(main.jsp)

main.jsp

<%@ page  contentType="text/html; charset=UTF-8"%>

<% request.setCharacterEncoding("utf-8"); %>

<%

//쿠키 읽음

Cookie[] ck  = request.getCookies();

String popUrl = "";

String strUrl, str;


strUrl = "popup.jsp";

str    = "window.open('" + strUrl + "', 'Think', ";

str    = str + "'left=610, ";

str    = str + "top=10, ";

str    = str + "width=372, ";

str    = str + "height=466, ";

str    = str + "toolbar=no, ";

str    = str + "menubar=no, ";

str    = str + "status=no, ";

str    = str + "scrollbars=no, ";

str    = str + "resizable=no')";

//팝업창 주소 설정

popUrl = str;


if(ck != null) {

 for(Cookie c : ck) {

if(c.getName().equals("popup") && c.getValue().equals("no")) {

popUrl = "";//popup 쿠키의 값이 no일 경우 팝업창주소를 초기화 시키고 멈춤

        break;

}

}

}

%>

<!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>

<link rel="stylesheet" type="text/css" href="style.css"/>

</head>

<body leftmargin="8" onload="<%=popUrl%>">

<table cellSpacing=0 cellPadding=0 border=0 width="700">

<tr>

<td align="center">쿠키를 이용한 팝업 예제 프로그램</td>

</tr>

</table>

</body>

</html>


쿠키를 활용한 팝업창 만들기 예제(popup.jsp)

popup.jsp


<%@ page  contentType="text/html; charset=UTF-8"%>

<% request.setCharacterEncoding("utf-8"); %>

<%


String win, popup;

win = request.getParameter("win");

if (win == null || win.equals(""))

   win = "no";


popup = request.getParameter("popup");

if(popup == null || popup.equals(""))

   popup = "yes";


//쿠키 생성(이름: popup, 값: yes || no)

Cookie c = new Cookie("popup", popup);

c.setMaxAge(60);//1분

//c.setMaxAge(86400);//하루

c.setPath("/");

response.addCookie(c);


//파라미터 win의 값이 yes라면 현재 보고있는 창 종료,

if(win.equals("yes")){

    out.println("<script type=\"text/javascript\">");

    out.println("window.close();");

    out.println("</script>");

} else {

//파라미터 win의 값이 yes 가 아닐경우 html 작성

%>

<!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>

<link rel="stylesheet" type="text/css" href="style.css"/>

<script type="text/javascript">

  function sendIt() {

     document.myForm.submit();

  }

 

</script>

</head>

<body>

<form name="myForm" method="post" action="popup.jsp">

<table width="372" border="0" cellspacing="0" cellpadding="0">

<tr>

  <td width="372" colspan="2" height="437" valign="top" align="center">

        <br/>팝업 예제<br/>

   </td>

</tr>

<tr>

  <td align="center" height="28" width="332" bgcolor="#f5f5f5">

      <input type="checkbox" name="popup" value="no"/><font color="#555555"> 오늘 하루동안 이 창을 열지 않음</font>

      <input type="hidden" name="win" value="yes"/>

  </td>

  <td height="28" align="right" width="40" bgcolor="#f5f5f5">

      <img src="hor.gif"/><a href="#" onclick="sendIt();">Close</a>&nbsp;&nbsp;

  </td>

</tr>

</table>

</form>

</body>

</html>

<%

}

%>




메인 페이지


팝업 페이지