JSP 쿠키 처리


쿠키는 클라이언트 컴퓨터에 저장되는 텍스트 파일로 많은 양의 궤적 정보를 저장합니다. 서블릿 기술을 기반으로 JSP는 분명히 HTTP 쿠키에 대한 지원을 제공할 수 있습니다.

재구매 고객을 식별하는 데는 일반적으로 세 단계가 있습니다.

  •       서버 스크립트는 일련의 쿠키를 브라우저에 보냅니다. 이름, 나이, 주민등록번호 등

  • 브라우저는 필요할 경우를 대비해 이 정보를 컴퓨터에 로컬로 저장합니다.

  • 다음에 브라우저가 서버에 요청을 보낼 때 이러한 쿠키 정보도 서버에 보내고 서버는 이 정보를 사용하여 사용자를 식별하거나 다른 작업을 수행합니다.

이 섹션에서는 쿠키 설정 또는 재설정 방법, 쿠키 액세스 방법 및 삭제 방법에 대해 설명합니다.

JSP 쿠키 처리에는 중국어 인코딩 및 디코딩이 필요하며 방법은 다음과 같습니다.

String   str   =   java.net.URLEncoder.encode("中文");            //编码
String   str   =   java.net.URLDecoder.decode("编码后的字符串");   // 解码

쿠키 분석

쿠키는 일반적으로 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=php; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=php.cn
Connection: close
Content-Type: text/html

보시다시피 Set-Cookie 정보 헤더에는 키-값 쌍, GMT(그리니치 표준시) 시간, 그리고 도메인 이름. 키-값 쌍은 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 스크립트는 쿠키 객체의 배열을 반환하는 요청 객체의 getCookies() 메소드를 통해 이러한 쿠키에 액세스합니다.


서블릿 쿠키 메소드

다음 표에는 쿠키 객체에서 일반적으로 사용되는 메소드가 나열되어 있습니다.

일련 번호 방법 & 설명
1public void setDomain(문자열 패턴)


w3cschool.cc
와 같은 쿠키의 도메인 이름을 설정합니다. 2공용 문자열 getDomain()


w3cschool.cc
와 같은 쿠키의 도메인 이름을 가져옵니다. 3public void setMaxAge(int expiry)


쿠키 유효 기간을 초 단위로 설정하세요. 기본 유효 기간은 현재 세션의 생존 시간입니다.
4public int getMaxAge()


쿠키 유효 기간을 초 단위로 가져옵니다. 기본값은 -1이며, 이는 브라우저가 닫힐 때까지 쿠키가 유지됨을 나타냅니다.
5공용 문자열 getName()


쿠키 이름을 반환합니다.
6public void setValue(String newValue)


쿠키 값 설정
7공용 문자열 getValue()


쿠키의 가치를 알아보세요
8public void setPath(String uri)


현재 페이지 디렉터리의 모든 URL과 이 디렉터리의 모든 하위 디렉터리를 기본값으로 설정하는 쿠키 경로를 설정합니다.
9공용 문자열 getPath()


쿠키 경로 가져오기
10public void setSecure(부울 플래그)


전송을 위해 쿠키를 암호화해야 하는지 여부를 표시
                  11public void setComment(문자열 용도)


쿠키의 목적을 설명하는 주석을 설정하십시오. 브라우저가 사용자에게 쿠키를 표시하면 댓글이 매우 유용해집니다.
                    12공개 문자열 getComment()


쿠키의 목적을 설명하는 주석을 반환하거나, 쿠키가 없으면 null을 반환합니다

JSP를 사용하여 쿠키 설정

JSP를 사용하여 쿠키를 설정하는 작업은 세 단계로 구성됩니다.

(1) 쿠키 객체 생성: 쿠키 생성자 호출 , 쿠키 이름과 값을 매개변수로 사용하며 둘 다 문자열입니다.

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 
   Cookie name = new Cookie("name",
		   str);
   Cookie url = new Cookie("url",
			  request.getParameter("url"));

   // 设置cookie过期时间为24小时。
   name.setMaxAge(60*60*24); 
   url.setMaxAge(60*60*24); 

   // 在响应头部添加cookie
   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>

다음은 클라이언트 데이터를 main.jsp에 제출하는 간단한 HTML 형식입니다. 파일을 만들고 쿠키를 설정합니다:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</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 파일에 제출합니다. 데모 Gif는 다음과 같습니다.

"사이트 이름"과 "웹 주소"를 입력한 후 제출 버튼을 클릭하면 화면에 "사이트 이름"과 "웹 주소"가 표시되고 "사이트 이름"과 "웹 주소"가 모두 설정됩니다. 주소" 쿠키.


JSP를 사용하여 쿠키 읽기

쿠키를 읽으려면 request.getCookies() 메서드를 호출하여 javax.servlet.http.Cookie 객체 배열을 가져와야 합니다. 이 배열을 반복하고 getName() 메서드와 getValue() 메서드를 사용하여 각 쿠키의 이름과 값을 가져옵니다.

<h3 예시 데모< h3="">

이전 예시의 쿠키를 읽어보겠습니다. 다음은 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("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }else{
      out.println("<h2>没有发现 Cookie</h2>");
  }
%>
</body>
</html>

브라우저 접속 후, 출력 결과는 다음과 같습니다.

C6A7341F-029A-4244-8B38-BE010E391091.jpg


JSP를 사용하여 쿠키 삭제

쿠키를 삭제하는 방법은 매우 간단합니다. 쿠키를 삭제하려면 아래 단계를 따르세요.

  • 기존 쿠키를 가져와서 Cookie 개체에 저장합니다.

  • 쿠키 만료 날짜를 0으로 설정합니다.

  • 이 쿠키를 응답 헤더에 다시 추가하세요.


예시 데모

다음 프로그램은 "name"이라는 쿠키를 삭제합니다. 두 번째로 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: " + 
            cookie.getName( ) + "<br/>");
         }
         out.print("参数名 : " + cookie.getName());
         out.print("<br>");
         out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }else{
	  out.println("<h2>没有发现 Cookie</h2>");
  }
%>
</body>
</html>

는 브라우저를 통해 액세스되며 출력 결과는 다음과 같습니다.

C6A7341F-029A-4244-8B38-BE010E391091.jpg

http://localhost:8080/testjsp/cookie.jsp를 다시 방문하면 다음과 같은 결과를 얻을 수 있습니다.

7BF1C669-F7A4-4245-B7B0-B79BBB272604.jpg

width="70%" "name"이라는 이름의 쿠키가 사라진 것을 확인할 수 있습니다.

브라우저에서 쿠키를 수동으로 삭제할 수도 있습니다. IE 브라우저에서는 도구 메뉴 항목을 클릭한 후 인터넷 옵션을 선택하고 쿠키 삭제를 클릭하여 모든 쿠키를 삭제할 수 있습니다.