반응형
쿠키 사용하기
- 쿠키는 웹 브라우저가 보관하는 데이터
- 웹브라우저는 웹서버에 요청을 보낼 때 쿠키를 함께 전송하며,
- 웹서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를 읽을 수 있다.
- 쿠키는 웹서버와 웹 브라우저 양쪽에서 생성할 수 있다.
- 이를 사용하면 웹서버와 웹브라우저는 필요한 값을 공유하고 상태를 유지할 수 있다
쿠키의 동작 방식
- 쿠키 생성
- jsp 프로그래밍에서 쿠키를 웹서버 측에서 생성한다.
- 생성한 쿠키를 응답 데이터의 헤더에 저장해서 웹브라우저에 전송한다.
- 쿠키 저장
- 웹 브라우저는 응답 데이터에 포함된 쿠키를 저장소에 보관한다.
- 쿠키의 종류에 따라 메모리나 파일에 저장한다.
- 쿠키 전송
- 웹 브라우저는 저장한 쿠키를 요청이 있을 때마다 웹서버에 전송한다.
- 웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 작업을 수행한다.
쿠키의 구성

- name
- value
- expires
- max-age
- path
- domain
CRUD 예제
makeCookie.jsp > key-value로 생성하기, urlEncoder 를 이용해 보안을 높힐 수 있음.
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page import = "java.net.URLEncoder" %>
<%
Cookie cookie = new Cookie("name", URLEncoder.encode("최범균", "utf-8"));
cookie.setMaxAge(30); // expire time (s)
response.addCookie(cookie);
%>
<html>
<head><title>쿠키생성</title></head>
<body>
<%= cookie.getName() %> 쿠키의 값 = "<%= cookie.getValue() %>"
</body>
</html>
viewCookies.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page import = "java.net.URLDecoder" %>
<html>
<head><title>쿠키 목록</title></head>
<body>
쿠키 목록<br>
<%
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (int i = 0 ; i < cookies.length ; i++) {
%>
<%= cookies[i].getName() %> =
<%= URLDecoder.decode(cookies[i].getValue(), "utf-8") %><br>
<%
}
} else {
%>
쿠키가 존재하지 않습니다.
<%
}
%>
</body>
</html>
modifyCookie.jsp > 새로운 쿠키를 생성해서 덮어 씌우기
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page import = "java.net.URLEncoder" %>
<%
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (int i = 0 ; i < cookies.length ; i++) {
if (cookies[i].getName().equals("name")) {
Cookie cookie = new Cookie("name",
URLEncoder.encode("JSP프로그래밍", "utf-8"));
response.addCookie(cookie);
// cookies[i].setValue(URLEncoder.encode("JSP프로그래밍", "utf-8"));
// response.addCookie(cookies[i]);
}
}
}
%>
<html>
<head><title>값 변경</title></head>
<body>
name 쿠키의 값을 변경합니다.
</body>
</html>
delete.jsp > setMaxAge(0) 으로 설정해서 expire를 조작해서 바로 삭제되게 설정
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page import = "java.net.URLEncoder" %>
<%
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (int i = 0 ; i < cookies.length ; i++) {
if (cookies[i].getName().equals("name")) {
Cookie cookie = new Cookie("name", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
// cookies[i].setMaxAge(0);
// response.addCookie(cookies[i]);
}
}
}
%>
<html>
<head><title>쿠키 삭제</title></head>
<body>
name 쿠키를 삭제합니다.
</body>
</html>
쿠키의 도메인
- 기본적으로 쿠키는 그 쿠키를 생성한 서버에만 전송된다.
- 같은 도메인을 사용하는 모든 서버에 쿠키를 보내야 할 때가 있다.
- .naver.com
- 점으로 시작하는 경우 관련 도메인에 모두 쿠키를 전송한다.
- 예를 들어 .naver.com으로 설정하면, mail.naver.com, www.naver.com, shopping.naver.com 에 모두 쿠키를 전송한다.
- www.naver.com
- 특정 도메인에 대해서만 쿠키를 전송한다.
- 도메인을 지정할 때 주의할 점은 setDomain()의 값으로 현재 서버의 도메인 및 상위 도메인만 전달할 수 있다는 점이다.
- 다른 주소를 값으로 주는 경우 쿠키는 생성되지 않는다.
쿠키의 유효 시간
- 쿠키는 유효 시간을 갖는다.
- 쿠키의 유효 시간을 지정하지 않으면 웹 브라우저를 종료할 때 쿠키를 함께 삭제한다.
- 쿠키의 유효 시간을 정해놓으면 웹브라우저를 종료해도 그 유효 시간동안 쿠키를 삭제하지 않는다.
쿠키의 용량 제한
- 개수와 용량 제한이 있는데 브라우저마다 다를 수 있다.
- 한 사이트에 저장 가능한 쿠키는 최대 20개이고 한 사이트의 최대 쿠키 크기는 4KB이다.
- 웹 스토리지에는 5KB 까지 저장이 가능하다.
console 에서 쿠키 조작
- document.cookie = "name=value; attribute=attribute_value"

로그인 구현 예제
loginForm.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head><title>로그인폼</title></head>
<body>
<form action="<%= request.getContextPath() %>/day2/member/login.jsp"
method="post">
아이디 <input type="text" name="id" size="10">
암호 <input type="password" name="password" size="10">
<input type="submit" value="로그인">
</form>
</body>
</html>
login.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page import = "util.Cookies" %>
<%
String id = request.getParameter("id");
String password = request.getParameter("password");
if (id.equals(password)) {
// ID와 암호가 같으면 로그인에 성공한 것으로 판단.
response.addCookie(
Cookies.createCookie("AUTH", id, "/", -1)
);
%>
<html>
<head><title>로그인성공</title></head>
<body>
로그인에 성공했습니다.
</body>
</html>
<%
} else { // 로그인 실패시
%>
<script>
alert("로그인에 실패하였습니다.");
history.go(-1);
</script>
<%
}
%>
반응형