English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JSP 쿠키 처리

쿠키는 고객의 컴퓨터에 저장된 텍스트 파일로, 많은 추적 정보를 저장합니다. Servlet 기술에 기반한 JSP는 HTTP 쿠키에 대한 지원을 제공합니다。

고객을 인식하는 데 일반적으로 세 가지 단계가 있습니다:

  •             서버 스크립트는 이름, 나이, ID 번호 등과 같은 일련의 쿠키를 브라우저로 보냅니다。

  •             브라우저는 이 정보를 필요에 따라 사용할 수 있도록 로컬 컴퓨터에 저장합니다。

  •             브라우저가 서버로 어떤 요청도 보내면, 그때마다 이 쿠키 정보도 서버로 함께 보냅니다. 그런 다음 서버는 이 정보를 사용하여 사용자를 인식하거나 다른 일을 합니다。

이 장에서는 쿠키를 설정하거나 재설정하는 방법, 그리고 이를 어떻게 접근하고 어떻게 삭제하는지 알려드리겠습니다。

JSP 쿠키 처리를 위해 중국어를 인코딩 및 디코딩하는 방법은 다음과 같습니다:

String str = java.net.URLEncoder.encode("中文", "UTF")-8);            //编码
String str = java.net.URLDecoder.decode("编码后的字符串","UTF")-8);   // 해독

쿠키 분석

쿠키는 일반적으로 HTTP 정보 헤더에서 설정됩니다(JavaScript가 브라우저에서 직접 쿠키를 설정할 수 있지만). JSP에서 쿠키를 설정하려면 서버로 다음과 같은 정보 헤더를 보내야 합니다:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2015 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=w3codebox; expires=Friday, 04-Feb-17 22:03:38 GMT; 
                 path=/; domain=oldtoolbag.com
Connection: close
Content-Type: text/html

정확히 보시다시피, Set-쿠키 정보 헤더는 키밸류对人体, GMT(Greenwich Mean Time) 시간, 경로, 도메인을 포함합니다. 키밸류对人体은 URL로 인코딩됩니다. 만료 도메인은 명령어로, 브라우저가 언제 이 쿠키를 지울 수 있는지를 알립니다.

브라우저가 쿠키를 저장할 수 있는 설정이 되어 있다면, 이 정보는 만료될 때까지 저장됩니다. 사용자가 접근한 페이지가 쿠키에 포함된 경로와 도메인과 일치하면, 브라우저는 이 쿠키를 서버로 다시 보냅니다. 브라우저의 정보 헤더는 다음과 같습니다:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

JSP 스크립트는 request 객체의 getCookies() 메서드를 통해 이러한 쿠키에 접근합니다. 이 메서드는 Cookie 객체 배열을 반환합니다.

    Servlet Cookie 메서드

다음 표는 Cookie 객체에서 사용되는 일반적인 메서드를 나열합니다:

순번메서드 & 설명
                1public void setDomain(String pattern) 쿠키의 도메인을 설정합니다. 예를 들어 oldtoolbag.com
                2public String getDomain() 쿠키의 도메인을 가져옵니다. 예를 들어 oldtoolbag.com
                3public void setMaxAge(int expiry) 쿠키 유효기를 초로 단위로 설정합니다. 기본적으로 현재 세션의 유지 시간이 유효기간으로 설정됩니다
                4public int getMaxAge() 쿠키 유효기를 초로 단위로 가져옵니다. 기본적으로-1 으로, 쿠키가 브라우저가 닫을 때까지 유효합니다
                5public String getName() 쿠키의 이름을 반환합니다. 이름이 생성되면 수정할 수 없습니다
                6public void setValue(String newValue) 쿠키의 값을 설정합니다
                7public String getValue() 쿠키의 값을 가져옵니다
                8public void setPath(String uri) 쿠키의 경로를 설정합니다. 기본적으로 현재 페이지 디렉토리에 있는 모든 URL과 이 디렉토리의 모든 서브디렉토리가 포함됩니다
                9public String getPath() 쿠키의 경로를 가져옵니다
                10public void setSecure(boolean flag) 쿠키가 암호화된 전송을 받을지 여부를 지정합니다
                11public void setComment(String purpose) 쿠키 목적을 설명하는 주석을 설정합니다. 브라우저가 쿠키를 사용자에게 표시할 때 주석이 매우 유용합니다
                12public String getComment() 쿠키 목적에 대한 설명을 반환하거나 반환하지 않습니다

JSP를 사용하여 쿠키 설정

JSP를 사용하여 쿠키를 설정하는 과정은 세 단계로 이루어집니다:

(1) 쿠키 객체를 생성합니다: cookie의 생성자를 호출하여 쿠키 이름과 값을 매개변수로 사용합니다. 두 가지 모두 문자열입니다。

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

이름과 값에 공백이나 다음과 같은 문자를 포함할 수 없도록 반드시 기억해야 합니다:

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

(2) 유효기간 설정:setMaxAge() 함수를 호출하여 쿠키가 얼마나 오래 유효할지(초로 단위)를 지정합니다. 다음 작업은 유효기를 설정했습니다: 24 시간.

cookie.setMaxAge(60*60*24);

(3) 쿠키를 HTTP 응답 헤더로 전송합니다:response.addCookie() 함수를 호출하여 HTTP 응답 헤더에 쿠키를 추가합니다。

response.addCookie(cookie);

예제 설명

main.jsp 파일 코드는 다음과 같습니다:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net." %>*" %>
<%
   // 인코딩, 중국어 레디웨어 문제 해결   
   String str = URLEncoder.encode(request.getParameter("name"),"utf-8);  
   // name과 url 쿠키 설정 
   Cookie name = new Cookie("name",
           str);
   Cookie url = new Cookie("url",
              request.getParameter("url"));
   // 쿠키 만료 시간 설정24시간.
   name.setMaxAge(60*60*24); 
   url.setMaxAge(60*60*24); 
   // 응답 헤더에 쿠키 추가
   response.addCookie(name);
   response.addCookie(url);
%>
<html>
<head>
<title>Cookie 설정</title>
</head>
<body>
<h1>Cookie 설정</h1>
<ul>
<li><p><b>웹사이트명:</b>
   <%= request.getParameter("name") %>
</p></li>
<li><p><b>웹사이트:</b>
   <%= request.getParameter("url") %>
</p></li>
</ul>
</body>
</html>

다음은 GET 메서드를 통해 클라이언트 데이터를 main.jsp 파일에 제출하고 쿠키를 설정하는 간단한 HTML 양식입니다:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>기본 튜토리얼 웹(oldtoolbag.com)</title>
</head>
<body>
<form action="main.jsp" method=GET>
사이트명: <input type="text" name="name">
<br />
웹사이트: <input type="text" name="url" />
<input type="submit" value="제출" />
</form>
</body>
</html>

위의 HTML 코드를 test.htm 파일에 저장합니다.

이 파일을 현재 jsp 프로젝트의 WebContent 디렉토리에 저장합니다. (main.jsp와 같은 디렉토리).

http:에 접속하여//localhost:8080/testjsp/test.html 파일이 main.jsp 파일에 양식 데이터를 제출하는 예제:

"站点명" 과 "웹사이트"를 입력한 후 제출 버튼을 클릭하면, "站点명" 과 "웹사이트"가您的屏幕에 표시되고, "站点명" 과 "웹사이트"의 두 개의 쿠키를 설정합니다.

JSP를 사용하여 Cookie 읽기

cookie를 읽기 위해 request.getCookies() 메서드를 호출하여 javax.servlet.http.Cookie 객체의 배열을 얻고, 이 배열을 순회하며 getName() 메서드와 getValue() 메서드를 사용하여 각 cookie의 이름과 값을 가져옵니다.

예제 설명

이전 예제에서의 cookie를 읽어보겠습니다. 아래는 cookie.jsp 파일 코드입니다:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net." %>*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Cookie 가져오기</title>
</head>
<body>
<%
   Cookie cookie = null;
   Cookie[] cookies = null;
   // cookies의 데이터를 가져오기, 이는 배열입니다
   cookies = request.getCookies();
   if( cookies != null ){
      out.println("<h2> 찾기 Cookie 이름과 값</h2]);
      for (int i = 0; i < cookies.length; i++{
         cookie = cookies[i];
        
         out.print("파라미터 이름: " + cookie.getName());
         out.print("<br>
         out.print("파라미터 값: " + -8) +" <br>"
         out.print("------------------------------------<br>
      }
  }
      out.println("<h2>쿠키를 찾을 수 없음</h2]);
  }
%>
</body>
</html>

브라우저에서 접근 후, 출력 결과는 다음과 같습니다:

    JSP를 사용하여 cookie를 지우기

cookie를 지우는 것은 매우 간단합니다. cookie를 지우려면 아래의 단계를 따르세요:

  •             기존 cookie를 가져오고 Cookie 객체에 저장합니다.

  •             cookie의 유효 기간을 0으로 설정합니다.

  •             이 cookie를 응답 헤더에 다시 추가합니다.

예제 설명

아래의 프로그램은 "name" 이름의 cookie를 지우는 예제입니다. cookie.jsp를 두 번 실행하면 name이 null이 됩니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net." %>*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Cookie 가져오기</title>
</head>
<body>
<%
   Cookie cookie = null;
   Cookie[] cookies = null;
   // 현재 도메인 아래의 cookies를 가져옵니다. 이는 배열입니다
   cookies = request.getCookies();
   if( cookies != null ){
      out.println("<h2> 찾기 Cookie 이름과 값</h2]);
      for (int i = 0; i < cookies.length; i++{
         cookie = cookies[i];
         if((cookie.getName( )).compareTo("name") == 0 ){
            cookie.setMaxAge(0);
            response.addCookie(cookie);
            out.print("쿠키 삭제: " + 
            cookie.getName( ) + "<br/]);
         }
         out.print("파라미터 이름: " + cookie.getName());
         out.print("<br>
         out.print("파라미터 값: " + -8) +" <br>"
         out.print("------------------------------------<br>
      }
  }
      out.println("<h2>쿠키를 찾을 수 없음</h2]);
  }
%>
</body>
</html>

브라우저를 통해 접근하면 다음과 같은 출력 결과가 나타납니다:

다시 http://localhost:8080/testjsp/cookie.jsp을 실행하면 다음과 같은 결과를 얻습니다:

이제 "name"이라는 쿠키가 사라졌음을 확인할 수 있습니다.

브라우저에서 직접 쿠키를 지우실 수도 있습니다. IE 브라우저에서 도구 메뉴를 클릭하고 인터넷 옵션을 선택한 후 Delete Cookies를 클릭하면 모든 쿠키가 지워집니다.