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() 메소드를 통해 이러한 쿠키에 액세스합니다.
서블릿 쿠키 메소드
다음 표에는 쿠키 객체에서 일반적으로 사용되는 메소드가 나열되어 있습니다.
일련 번호 | 방법 & 설명 |
---|---|
1 | public void setDomain(문자열 패턴) |
와 같은 쿠키의 도메인 이름을 설정합니다. 2 | 공용 문자열 getDomain() |
와 같은 쿠키의 도메인 이름을 가져옵니다. 3 | public void setMaxAge(int expiry) |
4 | public int getMaxAge() |
5 | 공용 문자열 getName() |
6 | public void setValue(String newValue) |
7 | 공용 문자열 getValue() |
8 | public void setPath(String uri) |
9 | 공용 문자열 getPath() |
10 | public void setSecure(부울 플래그) |
11 | public void setComment(문자열 용도) |
12 | 공개 문자열 getComment() |
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>
브라우저 접속 후, 출력 결과는 다음과 같습니다.
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>
는 브라우저를 통해 액세스되며 출력 결과는 다음과 같습니다.
http://localhost:8080/testjsp/cookie.jsp를 다시 방문하면 다음과 같은 결과를 얻을 수 있습니다.
width="70%" "name"이라는 이름의 쿠키가 사라진 것을 확인할 수 있습니다.
브라우저에서 쿠키를 수동으로 삭제할 수도 있습니다. IE 브라우저에서는 도구 메뉴 항목을 클릭한 후 인터넷 옵션을 선택하고 쿠키 삭제를 클릭하여 모든 쿠키를 삭제할 수 있습니다.