English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
쿠키는 고객의 컴퓨터에 저장된 텍스트 파일로, 많은 추적 정보를 저장합니다. 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 객체 배열을 반환합니다.
다음 표는 Cookie 객체에서 사용되는 일반적인 메서드를 나열합니다:
순번 | 메서드 & 설명 |
---|---|
1 | public void setDomain(String pattern) 쿠키의 도메인을 설정합니다. 예를 들어 oldtoolbag.com |
2 | public String getDomain() 쿠키의 도메인을 가져옵니다. 예를 들어 oldtoolbag.com |
3 | public void setMaxAge(int expiry) 쿠키 유효기를 초로 단위로 설정합니다. 기본적으로 현재 세션의 유지 시간이 유효기간으로 설정됩니다 |
4 | public int getMaxAge() 쿠키 유효기를 초로 단위로 가져옵니다. 기본적으로-1 으로, 쿠키가 브라우저가 닫을 때까지 유효합니다 |
5 | public String getName() 쿠키의 이름을 반환합니다. 이름이 생성되면 수정할 수 없습니다 |
6 | public void setValue(String newValue) 쿠키의 값을 설정합니다 |
7 | public String getValue() 쿠키의 값을 가져옵니다 |
8 | public void setPath(String uri) 쿠키의 경로를 설정합니다. 기본적으로 현재 페이지 디렉토리에 있는 모든 URL과 이 디렉토리의 모든 서브디렉토리가 포함됩니다 |
9 | public String getPath() 쿠키의 경로를 가져옵니다 |
10 | public void setSecure(boolean flag) 쿠키가 암호화된 전송을 받을지 여부를 지정합니다 |
11 | public void setComment(String purpose) 쿠키 목적을 설명하는 주석을 설정합니다. 브라우저가 쿠키를 사용자에게 표시할 때 주석이 매우 유용합니다 |
12 | public String getComment() 쿠키 목적에 대한 설명을 반환하거나 반환하지 않습니다 |
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 파일에 양식 데이터를 제출하는 예제:
"站点명" 과 "웹사이트"를 입력한 후 제출 버튼을 클릭하면, "站点명" 과 "웹사이트"가您的屏幕에 표시되고, "站点명" 과 "웹사이트"의 두 개의 쿠키를 설정합니다.
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>
브라우저에서 접근 후, 출력 결과는 다음과 같습니다:
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를 클릭하면 모든 쿠키가 지워집니다.