고급JAVA 29강 - Cookie

Whatever·2021년 12월 7일
0

고급 JAVA

목록 보기
29/32

: 인터넷 웹사이트의 방문기록을 남겨 사용자와 웹사이트 사이를 매개해 주는 정보.

  1. Cookie객체 생성한다.
    ==> '쿠키변수'와 '쿠키값'은 문자열로 저장한다.
    형식) Cookie cookie변수 = new Cookie('쿠키변수','쿠키값')
    ==> 쿠키값으로 한글을 사용할 경우에는 URLEncoder.encode()메서드로 인코딩 후 저장한다.
Cookie name Cookie = new Cookie("name", URLEncoder.encode("홍길동", "UTF-8"));
  1. 쿠키 속성 설정
    쿠키변수.setPath("적용경로"); // 지정한 경로와 그 하위 경로에서 사용 가능하다.
    ==> 생략하면 쿠키를 설정할 당시의 경로가 설정된다.
    쿠키변수.setMaxAge(유지시간); // 단위(초)
    ( -1: 브라우저가 종료될 때까지 유지(기본값) / 0: 즉시 쿠키가 삭제된다.)
    쿠키변수.setDomain("적용도메인명");
    예) ".ddit.or.kr" ==> www.ddit.or.kr, www2.ddit.or.kr
    쿠키변수.setSecure(보안여부); // true : 적용 / false : 미적용(기본값)

https - 보안이 더 강화된 프로토콜, true만 가능
http - 보안이 더 낮은 프로토콜, false로 사용 가능

  1. response객체를 이용하여 쿠키를 웹브라우저 보내면 웹브라우저가 이 쿠키를 받아서 저장한다.
    형식) response객체.addCookie(1번에서 만든 Cookie객체);
  1. 전체 Cookie 정보를 Request객체를 이용해서 가져온다.
    ==> 가져온 Cookie 정보들은 배열에 저장된다.
    형식) Cookie[] 쿠키배열변수 = request.getCookies();

  2. 쿠키 배열에서 해당 쿠키 정보를 구해온다.

for(Cookie cookie : cookieArr){
	String name = cookie.getName(); //'쿠키 변수' 구하기
    //String value = cookie.getValue(); //'쿠키값' 구하기
    String value = URLDecoder.decode(cookie.getValue(), "utf-8");

}
  1. 쿠키 데이터의 삭제는 쿠키의 유지시간을 0으로 설정하는 방법을 사용한다.
    먼저 삭제할 쿠키를 구한 후 유지시간을 0으로 설정한 후 addCookie()메서드로 다시 저장하면 된다.
Cookie[] cookieArr = request.getCookies();
		
		out.println("<html><head><meta charset='utf-8'>");
		out.println("<title>Cookie 삭제 연습</title></head>");
		out.println("<body>");
		out.println("<h2>저장된 Cookie 데이터 삭제하기</h2>");
		
		if(cookieArr==null || cookieArr.length ==0 ) {
			out.println("<h3>삭제할 쿠키가 하나도 없습니다.</h3>");
		}else {
			// 반복문을 사용해서 삭제할 쿠키를 찾는다.
			// (예: city 쿠키변수에 저장된 쿠키삭제하기)
			for(Cookie cookie : cookieArr) {
				String name = cookie.getName(); // '쿠키변수'값 구하기
				
				if("city".equals(name)) { // 삭제할 쿠키 찾기
					cookie.setMaxAge(0); // 유지시간을 0으로 설정한다.
					response.addCookie(cookie); // 변경된 쿠키를 저장한다.
				}
			}
		}

CookieCountServlet.java

  • 방문할 때마다 횟수를 늘리는 Cookie
package kr.or.ddit.basic.cookie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/cookieCountServlet.do")
public class CookieCountServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
    ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		// countCookie라는 쿠키변수를 사용해서 처리
		
		// countCookie라는 쿠키가 있는지 검사한다.
		Cookie[] cookies = request.getCookies();
		
		int count = 0; // 카운트 값 저장할 변수 선언 및 초기화

		if(cookies!=null) {
			for(Cookie cookie : cookies) {
				String name = cookie.getName(); // 쿠키 변수 구하기
				if("count".equals(name)) {
					// 현재의 count값 구하기
					count = Integer.parseInt(cookie.getValue());
					break;
				}
			}
		}
		
		//cookie가 없으면 count는 0
		count++; // count 값 증가하기
		
		//증가된 count 값을 저장한다.
		Cookie countCookie = new Cookie("count", String.valueOf(count));
		
		response.addCookie(countCookie);
		
		out.println("<html><head><meta charset='utf-8'>");
		out.println("<title>Cookie 연습</title></head>");
		out.println("<style>div{border: 1px solid black; width:500px;}</style>");

		out.println("<body>");
		out.print("<div>");
		out.println("<h2>어서오세요. 당신은 "+ count +"번째 방문입니다.</h2>");
		out.println("<br><hr><br>");
		
		out.println("<a href='"+ request.getContextPath() +"/cookieCountServlet.do'>카운트 증가하기</a>");
		out.println("<a href='"+ request.getContextPath() +"/cookie/cookieTest02.jsp'>시작문서로 가기</a>");
		out.print("</div>");
		out.println("</body></html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
    ServletException, IOException {
		doGet(request, response);
	}

}

CookieCountDelServlet.java

package kr.or.ddit.basic.cookie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/cookieCountDelServlet.do")
public class CookieCountDelServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// count 쿠키 삭제하기
		
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		Cookie[] cookieArr = request.getCookies();
		
		for(Cookie cookie : cookieArr) {
			String name = cookie.getName();
			
			if("count".equals(name)) {
				cookie.setMaxAge(0);
				response.addCookie(cookie);
			}
		}
		out.println("<html><head><meta charset='utf-8'>");
		out.println("<title>Cookie 연습</title></head>");
		out.println("<style>div{border: 1px solid black; width:500px;}</style>");
		out.println("<body>");
		
		
		out.println("<div>");
		out.println("<h2>Count가 초기화 되었습니다.</h2>");
		out.println("<br><br>");
		
		out.println("<a href='"+ request.getContextPath() +"/cookie/cookieTest02.jsp'>시작문서로 가기</a><br><br>");
		out.println("</div>");
		out.println("</body></html>");
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

CookieLoginServlet.java

package kr.or.ddit.basic.cookie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/cookieLoginServlet.do")
public class CookieLoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		// userid, pass, chkid 값 읽어오기
		
		String userid = request.getParameter("id");
		String pass = request.getParameter("pass");
		String remember = request.getParameter("remember"); //checkbox
		
		// 쿠키 객체 생성
		Cookie idCookie = new Cookie("userId", userid);
			
		// checkbox의 체크 여부 검사
		if(remember==null) { // 체크가 해제된 상태
			// 쿠키 삭제한다.
			idCookie.setMaxAge(0);
			response.addCookie(idCookie);
		}else { // 체크된 상태
			// 쿠키 저장한다.
			response.addCookie(idCookie);
		}
		
//		// 값 가져오기 - id 기억하기 체크했을 때
//		// id 기억하기 체크 = true일 때 아이디 기억해서 jsp로 보내기
//		
//		if("true".equals(remember)) {// id기억하기가 check일 때
//			
//		/*	Cookie[] cookies = request.getCookies();
//			if(cookies!=null) {
//				for(Cookie cookie : cookies) {
//					if("id".equals(cookie.getName())){
//						userid = cookie.getValue();
//						response.addCookie(cookie);
//					}
//				}
//			}else {
//		*/		Cookie idCookie = new Cookie("id", userid);
//				response.addCookie(idCookie);
//					
//		}
		
		// 로그인 성공 여부 검
		//id와 pass가 test / 1234일 때 메인 화면으로 이동
		if("test".equals(userid) && "1234".equals(pass)) {
			//메인화면 이동
			//request.getRequestDispatcher(request.getContextPath() + "/cookie/cookieMain.jsp").forward(request, response);
			response.sendRedirect(request.getContextPath() + "/cookie/cookieMain.jsp");
		}else {
			response.sendRedirect(request.getContextPath() + "/cookie/cookieLogin.jsp");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

0개의 댓글