티스토리 뷰
- 쿠키의 개요
- 쿠키 생성
- 쿠키 정보
- 쿠키 삭제
- 쿠키의 개요
: 쿠키는 세션과 마찬가지로 클라이언트와 웹 서버 간의 상태를 유지하는 방법이다.
하지만 세션과의 차이점이 있다. 세션은 클라이언트에게 주어진 세션에 대한 정보를 웹 서버에 저장을 하는 반면에 쿠키는 클라이언트 웹 브라우저에 저장을 한다. 따라서 쿠키는 웹 서버에 부하를 줄여준다.
클라이언트 웹 브라우저에 저장함으로써 웹 서버에 request 시 저장되어 있는 쿠키를 웹 서버가 읽어 클라이언트의 상태를 결정한다. (로그인 상태... 등등)
하지만 쿠키는 세션과 다르게 보안에 취약하다는 단점이 있다.
# 쿠키의 동작 과정
- 쿠키 생성 단계 : 쿠키는 웹 서버 측에서 생성을 한다. 생성된 쿠키는 response 데이터와 함께 웹 브라우저에 전송된다.
- 쿠키 저장 단계 : 웹 브라우저는 전송된 쿠키를 쿠키 저장소에 저장. 쿠키의 종류에 따라 메모리, 파일로 저장된다.
- 쿠키 전송 단계 : 웹 브라우저는 저장 된 쿠키를 요청이 있을 때마다 웹 서버에 전송. 웹 서버는 전송된 쿠키를 사용.
JSP 페이지는 쿠키 기능을 사용하기 위해 Cookie 클래스를 사용한다.
#Cookie 클래스의 메소드
(get)
- getComment() / String / 쿠키에 대한 설명 반환
- getDomain() / String / 쿠키의 유요한 도메인 정보 반환
- getMaxAge() / int / 쿠키의 사용 가능 기간에 대한 정보
- getName() / String / 쿠키의 이름을 반환
- getPath() / String / 쿠키의 유효한 디렉터리 정보를 반환
- getSecure() / boolean / 쿠키의 보안 설정을 반환
- getValue() / String / 쿠키의 설정된 값을 반환
(set)
- setComment(String) / void / 쿠키에 대한 설명을 설정
- setDomain() / void / 쿠키의 유요한 도메인 정보 설정
- setMaxAge() / void / 쿠키의 사용 가능 기간에 대한 설정
- setPath() / void / 쿠키의 유효한 디렉터리 정보를 설정
- setSecure() / void / 쿠키의 보안 설정을 설정
- setValue() / void / 쿠키의 설정된 값을 설정
## 쿠키와 세션의 차이
구분 | 쿠키 | 세션 |
사용 클래스 | Cookie 클래스 | HttpSession 인터페이스 |
저장 형식 | 텍스트 | Object |
저장 장소 | 클라이언트 웹 브라우저 | 서버(세션 아이디만 클리이언트에게 저장) |
종료시점 | 쿠키 저장 시 설정 (설정 하지 않을 시 웹 브라우저 종류시 소멸) | 알 수 없음 |
리소스 | 클라이언트 리소스 사용 | 서버의 리소스 사용 |
보안 | 클라이언트 저장으로 보안에 취약 | 서버 저장으로 상대적으로 안정적 |
- 쿠키 생성
: 쿠키를 사용하기 위해서는 반드시 쿠키 생성!
쿠키 생성을 위해서는 Cookie() 메소드를 사용, 쿠키 생성 후 => response 내장 객체의 addCookie() 메소드로 쿠키를 설정
Cookie Cookie(String name, String value)
// 사용
Cookie cookie = new Cookie("memberId", "admin");
response.addCookie(cookie);
매개변수 name 은 쿠키 식별을 위한 이름, value는 쿠키 값
쿠키 객체를 생성한 후 addCookie() 메소드를 이용하여 해당 객체를 전송한다.
<form action="cookie01_process.jsp" method="post">
ID : <input type="text" name="id">
PASSWORD : <input type="text" name ="pwd">
<input type="submit" value="전송" >
</form>
/////////////////////////////////
<%
String user_id = request.getParameter("id");
String user_pwd = request.getParameter("pwd");
if(user_id.equals("admin") && user_pwd.equals("1234")){
Cookie cookie_id = new Cookie("userID", user_id); // 쿠키 생성 (아이디)
Cookie cookie_pwd = new Cookie("userPWD", user_pwd);// 쿠키 생성 (비밀번호)
response.addCookie(cookie_id); // 쿠키 전송
response.addCookie(cookie_pwd); // 쿠키 전송
out.println("쿠키 생성에 성공!");
out.println(user_id + "님 환영!");
} else {
out.println("쿠키 생성에 실패!");
}
%>
- 쿠키 정보
: 생성된 쿠키의 정보를 얻기 위해서는 request 내장 객체의 getCookie() 메소드를 사용하여 쿠키의 객체 를 얻어와야 한다. 그 후 getName(), getValue() 메소드를 사용하여 쿠키의 이름과 값을 얻어온다.
# 쿠키의 객체 얻기
: 클라이언트 웹 브라우저에 저장된 쿠키를 얻기 위해서는 request 내장 객체의 getCookie() 를 사용.
쿠키 객체를 배열 형태로 가져오는 방법.
Cookie[] request.getCookies()
//사용
Cookie[] cookies = request.getCookies();
# 쿠키 객체의 정보 얻기
: 쿠키를 가져오면 쿠키의 객체를 이용하여 해당 이름과 값을 얻어온다. => getName(), getValue() 사용
Cookie[] cookies = request.getCookies();
for(int i = 0; i<cookies.length; i++) {
out.pringln(cookies[i].getName() + " : " + cookies[i].getValue());
}
<%
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>");
}
%>
/////////////////////////////////////////// 출력
현재 설정된 쿠키의 개수 => 3
===========================================
설정된 쿠키의 속성 이름 [0] : userID
설정된 쿠키의 속성 값 [0] : admin
============================================
설정된 쿠키의 속성 이름 [1] : userPWD
설정된 쿠키의 속성 값 [1] : 1234
============================================
설정된 쿠키의 속성 이름 [2] : JSESSIONID
설정된 쿠키의 속성 값 [2] : E16EA88184BE110DF4C30B188031833F
============================================
- 쿠키 삭제
: cookie 클래스는 쿠키를 삭제하는 기능이 없다. 따라서 유효 기간을 0으로 설정하면 쿠키를 삭제할 수 있다.
유효 기간을 결정하는 메소드는 setMaxAge() 이다.
void setMaxAge(int age);
//// 사용
Cookie cookie = new Cookie("memberID", "admin");
cookie.setMaxAge(0); // 유효 기간을 0으로 설정 ==> 삭제!
response.addCookie(cookie);
객체를 생성하여 유효기간을 0으로 설정하고 해당 객체를 보내준다. ==> 클라이언트 웹 브라우저에서 삭제!
<%
Cookie[] cookies = request.getCookies();
for(int i =0; i<cookies.length; i++){
cookies[i].setMaxAge(0); // 쿠키 정보 삭제
response.addCookie(cookies[i]); // 삭제 객체 보내기
}
response.sendRedirect("cookie02.jsp");
%>
<출처 : 쉽게 배우는 jsp 웹 프로그래밍>
20000~