티스토리 뷰
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>
결과
network 의 response에서 결과를 확인할 수 있다.
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 예제의 결과와 비교해보면 삭제된 것을 확인할 수 있었다.
'코딩 > JSP' 카테고리의 다른 글
[쉽게 배우는 JSP 웹 프로그래밍 연습문제] 14장 (1) | 2023.12.19 |
---|---|
[11주 2일차] 데이터베이스 개발 환경 구축 (0) | 2023.12.19 |
웹 쇼핑몰 : 주문 처리 페이지 만들기 (0) | 2023.12.19 |
[쉽게 배우는 JSP 웹 프로그래밍 연습문제] 4장 (0) | 2023.12.19 |
[쉽게 배우는 JSP 웹 프로그래밍 연습문제] 13장 (+5번 문제 추후 추가) (1) | 2023.12.18 |
- Total
- Today
- Yesterday