비전공자 공부일기/:: WEB & Front-End

[WEB : Servlet] Cookie 쿠키(생성, 읽기, 제거)

와니_ 2019. 7. 2. 17:30

2019. 07. 02 필기

 

자바스크립트 쿠키는 따로 있음. 자바스크립트 쿠키는 권한이 있는, 예를들면 로그인 상태의 사람만 볼 수 있는 응답화면을 제공한다. 다음 예시의 쿠키는 이런 권한이 없어도 볼 수 있는 응답화면을 제공한다.

 

  • 쿠키 - 클라이언트에 저장되는 정보 / 간단한 데이터를 String 으로 저장
  • 세션 - 서버에 저장되는 정보 / 보안을 요하는 필요한 데이터를 객체로 저장

 

* 웹 페이지의 브라우저에서 마우스 오른쪽을 누르고 '(페이지) 검사'를 누르면 검사창이 뜨는데, 검사창 상단의 Application 탭을 누르면 Cookie를 확인할 수 있다.

 

쿠키를 생성하여 응답문서에 쿠키를 저장하여 클라이언트에게 전달하는 서블릿

@WebServlet("/read.itwill")
public class CookieReadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		
		//Http : 클라이언트가 제공하는 모!든! 쿠키(Cookie 인스턴스 배열)를 반환하는 메소드
		// => 클라이언트가 제공한 쿠키가 없는 경우 null 반환
		Cookie[] cookies=request.getCookies();
		
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Servlet</title>");
		out.println("<style>");
		out.println("p {color: #FF00CC; }");
		out.println("</style>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>클라이언트에 쿠키 전달</h1>");
		out.println("<hr>");
		out.println("<p>전달된 쿠키는 클라이언트의 가슴 속에 남아있습니다.</p>");
		out.println("<hr>");
		if(cookies==null) {
			out.println("<p>너는 쿠키가 없구나~</p>");
		} else {
			String id="";
			String count="";
			
			for(Cookie cookie:cookies) {
				//Cookie.getName() : 쿠키명을 반환하는 메소드
				if(cookie.getName().contentEquals("id")) {
					//Cookie.getValue() : 쿠키값을 반환하는 메소드
					id=cookie.getValue();
				} else if(cookie.getName().contentEquals("count")) {
					count=cookie.getValue();
				}
				
				if (!id.equals("")) {
					out.println("<p>아이디 ="+id+"</p>");
				}
				
				if(!id.equals("")) {
					int cnt=Integer.parseInt(count)+1;
					out.println("<p>요청횟수 ="+cnt+"</p>");
					
					Cookie countCookie = new Cookie("count", cnt+"");
					countCookie.setMaxAge(24*60*60);
					response.addCookie(countCookie);
				}
			}
		}
		out.println("<p><a href='create.itwill'>쿠키 전달</a></p>");
		out.println("<p><a href='remove.itwill'>쿠키 제거</a></p>");
		out.println("</body>");
		out.println("</html>");
	}

}

 

클라이언트에 저장되어 전달된 쿠키값을 응답문서로 생성하여 전달하는 서블릿
=> 클라이언트에 서버 문서를 요청할 경우 서버이름으로 저장된 모든 쿠키를 무조건 리퀘스트 메세지로 전달

@WebServlet("/read.itwill")
public class CookieReadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    	
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		
		//Http : 클라이언트가 제공하는 모!든! 쿠키(Cookie 인스턴스 배열)를 반환하는 메소드
		// => 클라이언트가 제공한 쿠키가 없는 경우 null 반환
		Cookie[] cookies=request.getCookies();
		
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Servlet</title>");
		out.println("<style>");
		out.println("p {color: #FF00CC; }");
		out.println("</style>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>클라이언트에 쿠키 전달</h1>");
		out.println("<hr>");
		out.println("<p>전달된 쿠키는 클라이언트의 가슴 속에 남아있습니다.</p>");
		out.println("<hr>");
		if(cookies==null) {
			out.println("<p>너는 쿠키가 없구나~</p>");
		} else {
			String id="";
			String count="";
			
			for(Cookie cookie:cookies) {
				//Cookie.getName() : 쿠키명을 반환하는 메소드
				if(cookie.getName().contentEquals("id")) {
					//Cookie.getValue() : 쿠키값을 반환하는 메소드
					id=cookie.getValue();
				} else if(cookie.getName().contentEquals("count")) {
					count=cookie.getValue();
				}
				
				if (!id.equals("")) {
					out.println("<p>아이디 ="+id+"</p>");
				}
				
				if(!id.equals("")) {
					int cnt=Integer.parseInt(count)+1;
					out.println("<p>요청횟수 ="+cnt+"</p>");
					
					Cookie countCookie = new Cookie("count", cnt+"");
					countCookie.setMaxAge(24*60*60);
					response.addCookie(countCookie);
				}
			}
		}
		out.println("<p><a href='create.itwill'>쿠키 전달</a></p>");
		out.println("<p><a href='remove.itwill'>쿠키 제거</a></p>");
		out.println("</body>");
		out.println("</html>");
	}

}

 

 

클라이언트에 저장된 쿠키를 제거하고 응답문서로 전달하는 서블릿

@WebServlet("/remove.itwill")
public class CookieRemoveServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		
		//클라이언트에서 제공된 모든 쿠키를 반환받아 저장
		Cookie[] cookies=request.getCookies();
		
		if(cookies!=null) {
			for(Cookie cookie:cookies) {
				//클라이언트에서 제공된 모든 Cookie 인스턴스의 지속시간을 0으로 변경
				cookie.setMaxAge(0);
				//지속시간이 변경된 Cookie 인스턴스를 클라이언트에게 전달
				// => Cookie 인스턴스를 전달받은 클라이언트는 지속시간이 0으로 셋팅되어 잇으므로 쿠키 소멸
				response.addCookie(cookie);
			}
		}
			
			out.println("<!DOCTYPE html>");
			out.println("<html>");
			out.println("<head>");
			out.println("<title>Servlet</title>");
			out.println("<style>");
			out.println("p {color: #FF00CC; }");
			out.println("</style>");
			out.println("</head>");
			out.println("<body>");
			out.println("<h1>클라이언트에 쿠키 전달</h1>");
			out.println("<hr>");
			out.println("<p>쿠키가 사망하였습니다.</p>");
			out.println("<hr>");
			out.println("</body>");
			out.println("</html>");	
	}

}