티스토리 뷰

코딩/JSP

[11주 2일차] 쿠키

ehzim 2023. 12. 19. 16:36

CHAPTER14. 쿠키 : 주문 처리 페이지 만들기

 

 

 

1. 쿠키의 개요

쿠키는 세션과 같이 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법이다.

하지만 세션과는 다르게 상태 정보를 웹 서버가 아닌 클라이언트에 저장한다.

 

쿠키의 생성 원리는 웹 사이트를 처음 방문한 사용자가 로그인 인증을 하고 나면 아이디와 비밀번호를 기록한 쿠키가 만들어진다. 그 후부터 사용자가 해당 웹 사이트에 접속하면 별도의 절차를 거치지 않고 쉽게 접속 할 수 있다.

이와 같이 쿠키는 서버에서 만들어져서 클라이언트에게 제공한다.

 

 

- 쿠키의 동작 과정

1. 쿠키 생성 단계 

: 쿠키를 사용하려면 먼저 쿠키를 생성해야한다. 쿠키는 주로 웹 서버 측에서 생성한다. 생성된 쿠키는 응답 데이터에 함께 저장되어 웹 브라우저에 전송된다.

 

2. 쿠키 저장 단계

: 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관한다. 쿠키는 종류에 따라 메모리나 파일로 저장된다.

 

3. 쿠키 전송 단계

: 웹 브라우저는 한번 저장된 쿠키를 요청이 있을 때 마다 웹 서버에 전송한다. 웹 서버는 웹 브라우저가 전송한 쿠키를 사용하여 필요한 작업을 수행할 수 있다.

 

 

 

 

Cookie 클래스의 메소드 종류

메소드 반환 유형 설명
getComment() String 쿠키에 대한 설명을 반환한다.
getDomain() String 쿠키의 유효한 도메인 정보를 반환한다.
getMaxAge() int 쿠키의 사용 가능 기간에 대한 정보를 반환한다.
getNmae() String 쿠키의 이름을 반환한다.
getPath() String 쿠키의 유효한 디렉터리 정보를 반환한다.
getSecure() boolean 쿠키의 보안 설정을 반환한다.
getValue() String 쿠키에 설정된 값을 반환한다.
getVersion() int 쿠키의 버전을 반환한다.
setComment(String) void 쿠키에 대한 설명을 설정한다.
setDomain(String) void 쿠키에 유효한 도메인을 설정한다.
setMaxAge(int) void 쿠키의 유효 기간을 설정한다.
setPath(String) void 쿠키의 유효한 디렉터리를 설정한다.
setSecure(boolean) void 쿠키의 보안을 설정한다.
setValue(String) void 쿠키의 값을 설정한다.
setVersion(int) void 쿠키의 버전을 설정한다.

 

 

 

 

 

* 쿠키와 세션의 차이

구분 쿠키 세션
사용 클래스 Cookie 클래스 HttpSession 인터페이스
저장 형식 텍스트 Object
저장 장소 클라이언트 서버(세션 아이디만 클라이언트에 저장)
종료 시점 쿠키 저장 시 설정(설정하지 않을 경우 웹 브라우저 종료 시 소멸) 정확한 시점을 알 수 없음
리소스 클라이언트의 리소스 사용 서버의 리소스 사용
보안 클라이언트에 저장되므로 사용자의 변경이 가능하여 보안에 취약하다. 서버에 저장되어 있어 상대적으로 안정적이다.

 

 

 

 

 

 

 

2. 쿠키 생성

 

쿠키를 사용하려면 먼저 Cookie 클래스를 사용하여 쿠키를 생성해야 한다.

쿠키를 생성한 후 반드시 response 내장 객체의 addCookie() 메소드를 사용하여 쿠키를 설정해야한다.

 

Cookie Cookie(String name, String value)

 

 

사용 예시

Cookie cookie = new Cookie("memberId", "admin");
response.addCookie(cookie);

 

쿠키 생성 시 생성자에 필요한 정보를 넣어서 생성한다.

response를 통해 cookie전달

 

 

 

 

 

 

쿠키 생성하기

예제 14-1

 

cookie01.jsp

<%@ 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>
	<form action="cookie01_process.jsp" method="post">
		<p> 아이디 : <input type="text" name="id">
		<p> 비밀번호 : <input type="text" name="passwd">
		<p> <input type="submit" value="전송">
	</form>
</body>
</html>

 

cookie01_process.jsp

<%@ 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("passwd");
		
		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>

 

결과

14-1 결과 (1)

 

network 의 response에서 결과를 확인할 수 있다.

14-1 결과 (2)

 

 

 

 

 

 

 

 

 

 

 

3. 쿠키 정보

 

생성된 쿠키의 정보를 얻어오려면 request 내장 객체의 getCookie() 메소드를 사용해 쿠키 객체를 얻어온 후 getName(), getValue() 메소드를 사용하여 쿠키 이름과 값을 얻어온다.

 

 

 

 

3-1. 쿠키 객체 얻기

클라이언트에 저장된 모든 쿠키 객체를 가져오려면 request 내장 객체의 getCookies() 메소드를 사용한다.

모든 객체를 가져오기 때문에 배열 형태로 가져온다.

(for문과 함께 사용)

 

Cookie[] cookies = request.getCookies();

 

 

 

 

3-2. 쿠키 객체의 정보 얻기

쿠키 객체를 얻어온 후 쿠키 객체에 저장된 쿠키 이름과 값을 가져오기 위해 getName(), getValue() 메소드를 사용한다.

 

Cookie[] cookies = request.getCookies();

for(int i=0; i<cookies.length; i++){
	out.println(cookies[i].getName() + " : " +cookies[i].getValue() + "<br>");
}

 

 

 

 

 

쿠키 객체에 저장된 모든 쿠키 값 가져와 출력하기

예제 14-2

 

<%@ 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>

 

모든 쿠키 값을 가져오기 때문에 getCookies() 메소드를 사용했고 배열 형태로 가져왔다.

배열 형태로 가져온 쿠키 값을 출력하기 위해 for문 을 사용하여 0번째부터 n번째 쿠키 정보를 확인할 수 있도록 했다.

 

 

결과

 

 

 

 

 

 

 

 

 

4. 쿠키 삭제

 

Cookie 클래스는 쿠키를 삭제하는 기능을 따로 제공하지 않는다.

쿠키를 더 유지할 필요가 없으면 쿠키의 유효 기간을 만효시킨다.

유효 기간을 설정하는 메소드로는 setMaxAge()가 있다.

setMaxAge(0) 으로 설정하면 유효 기간은 0이 되고 쿠키를 삭제할 수 있다.

 

Cookie cookie = new Cookie("memberId", "adminf");
cookie.setMaxAge(0);

 

 

 

 

 

 

쿠키 객체에 저장된 모든 쿠키 삭제하기

예제 14-3

 

<%@ 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);
			response.addCookie(cookies[i]);
		}
		
		response.sendRedirect("cookie02.jsp");
	%>
</body>
</html>

 

모든 쿠키 객체를 가져와 배열로 담아 주었고 for문 안의 setMaxAge(0) 메소드를 사용하여 유효 기간을 0으로 설정하여 삭제해주었다.

모든 코드를 마친 후 cookie02.jsp 로 이동하도록 하여 출력했다.

 

결과

 

14-2 예제의 결과와 비교해보면 삭제된 것을 확인할 수 있었다.

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday