수업/└JSP

[CH14]쿠키

onlyun 2022. 2. 17. 12:52

 

1. 쿠키

클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법

클라이언트(웹 브라우저)에 저장. (↔ 세션과 다른 점)

웹 서버 부하를 줄일 수 있으나 웹상에 저장하기 때문에 보안상 문제

 

※ 쿠키와 세션의 차이점 ※

  쿠키 세션
사용 클래스 Cookie 클래스 HttpSession 인터페이스
저장 형식 텍스트 형식 Object형
저장 장소 클라이언트 서버
(세션 아이디만 클라이언트 저장)
종료 시점 쿠키 저장 시 설정
설정하지 않을 경우 웹 브라우저 종료 시 소멸
정확한 시점 불분명
리소스 클라이언트 리소스 사용 서버 리소스 사용
보안 클라이언트 저장. 보안 취약 서버 저장. 상대적 안정성

 

(1) 동작과정

-생성 : 웹 서버측에서 생성. 응답 데이터와 함께 저장되어 웹브라우저에 전송

-저장 : 응답 데이터에 포함된 쿠키를 쿠키 저상소에 보관. 메모리나 파일로 저장

-전송 : 웹 브라우저는 한 번 저장된 쿠키를 요청이 있을 때마다 웹 서버에 전송

         웹 서버는 웹 브라우저가 전송한 쿠키를 사용하여 필요한 작업 수행.

 

웹 브라우저에 쿠키가 저장되면 쿠키가 삭제도기 전까지 웹 브라우저는 웹 서버에 쿠키 전송. 웹 애플리케이션을 사용하는 동안 지속적으로 유지해야 하는 정보는 쿠키를 이용해 저장.

 

(2) 쿠키 클래스 메소드(15)

getName()   getValue() setValue()
쿠키 이름 반환   쿠키에 설정된 값 반환 쿠키의 값 설정
getMaxAge() setMaxAge(0) getComment() setComment()
사용 가능 기간 반환 쿠키 유효 기간 설정
(쿠키 삭제 시 이용)
쿠키 설명 반환 쿠키 설명 설정
getDomain() setDomain() getPath() setPath()
유효한 도메인 정보 반환 유효한 도메인 설정 디렉토리 정보 반환 디렉토리 정보 설정
getSecure() setSecure() getVersion() setVersion()
보안 설정 반환 보안 설정 쿠키 버전 반환 쿠키 버전 설정

 

 

2. 쿠키 생성

-쿠키 메소드 사용 : Cookie()

생성 후 response 내장 객체의 addCookie() 메소드로 쿠키 설정해야 함.

쿠키 사용 : 쿠키 클래스로 쿠키 생성쿠키 설정(response 내장 객체 addCookie() 메소드)

                   <!--쿠키 식별 이름 / 쿠키 값-->
Cookie cookie = new Cookie("userID", user_id);
response.addCookie(cookie);

 

#예제) 쿠키 생성

-입력 폼 페이지

<form action="cookie01_process.jsp" method="post"> <!--쿠키생성 프로세스 연결-->
	<p>ID : <input type="text" name="id"></p>
	<p>PW : <input type="text" name="pw"></p>
	<p><input type="submit" name="전송"></p>
</form>

-프로세스 페이지 : 쿠키 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie</title>
</head>
<body>
<%
	String user_id = request.getParameter("id"); <!--입력값 가져오기-->
	String user_pw = request.getParameter("pw");
	
	if(user_id.equals("admin")&&user_pw.equals("1234")){
		Cookie cookie_id = new Cookie("userID", user_id);
		Cookie cookie_pw = new Cookie("userPW", user_pw);
		response.addCookie(cookie_id); <!--쿠키 생성 시 해야하는 작업-->
		response.addCookie(cookie_pw);
		out.println("쿠키 생성이 성공<br>");
		out.println(user_id+"님 환영합니다.");
	}else{
		out.println("쿠키 생성에 실패했습니다.");
	}
%>
</body>
</html>

-출력 결과

쿠키 생성이 성공
admin님 환영합니다.

3. 쿠키 정보

생성된 쿠키 정보 : request 내장 객체의 getCookie() 메소드 사용해 쿠키 객체 얻어옴

>> getName(), getValue() 메소드로 쿠키 이름과 값을 가져옴

 

클라이언트에 저장된 모든 쿠키 객체 가져오기

Cookie[] cookies = request.getCookies()

 

#예제) 쿠키 객체에 저장된 모든 쿠키 값 가져와 출력

(에러 뜬 상태) → 전체 지웠다가 다시 붙여넣으니 아무것도 수정 안 했는데 정상 출력됨. 이거 뭐야...진짜;;

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        Cookie[] cookies = request.getCookies(); //모든 쿠키 값 가져오기
        out.println("현재 설정된 쿠키의 개수 : "+ cookies.length + "<br>");
        out.println("--------------------------------<br>");
        for(int i=0; i<cookies.length; i++){
            out.println("설정된 쿠키의 속성 이름 [ "+ i + " ] : "+ cookies[i].getName()+"<br>");
            out.println("설정된 쿠키의 속성 값 [ "+ i + " ] : "+ cookies[i].getValue()+"<br>");
            out.println("--------------------------------<br>");			
        }
    %>
</body>
</html>

-출력 결과

현재 설정된 쿠키의 개수 : 3
--------------------------------
설정된 쿠키의 속성 이름 [ 0 ] : userID
설정된 쿠키의 속성 값 [ 0 ] : admin
--------------------------------
설정된 쿠키의 속성 이름 [ 1 ] : userPW
설정된 쿠키의 속성 값 [ 1 ] : 1234
--------------------------------
설정된 쿠키의 속성 이름 [ 2 ] : JSESSIONID
설정된 쿠키의 속성 값 [ 2 ] : 9B1B9A1DDA4F8477B85282E3442ADC7C
--------------------------------

4. 쿠키 삭제

쿠키의 유효기간을 0으로 설정해 쿠키를 삭제. setMaxAge(0)

 

#예제) 쿠키 객체에 저장된 모든 쿠키 삭제

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        Cookie[] cookies = request.getCookies();
	
        for(int i=0; i<cookies.length; i++){
            cookies[i].setMaxAge(0); //쿠키 유효기간을 0으로 설정해 삭제하는 것.
            response.addCookie(cookies[i]);
        }
        //쿠키 출력하는 곳으로 이동
        response.sendRedirect("cookie02.jsp");
    %>
</body>
</html>

 

[연습문제03]