쿠키(Cookie)
'쿠키(cookie)'는 웹 브라우저가 보관하고 있는 데이터로서 웹 서버에 요청을 보낼 때 함께 전송된다.
동작 방식
1. 쿠키의 구성
1) 구성 요소
- 이름 : 각각의 쿠키를 구별하는 데 사용되는 이름
- 값 : 쿠키의 이름과 관련된 값
- 유효시간 : 쿠키의 유지 시간
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 요청 경로
2) 쿠키 이름의 제약
- 쿠키의 이름은 아스키 코드의 알파벳과 숫자만을 포함할 수 있다.
- 콤마(,), 세미콜론(;), 공백(' ') 등의 문자는 포함할 수 없다.
- '$'로 시작할 수 없다.
2. JSP에서 쿠키 생성 / 읽기
1) Cookie 클래스를 이용해서 쿠키 생성
<%
Cookie cookie = new Cookie("cookieName", "cookieValue");
response.addCookie(cookie);
%>
2) 클라이언트가 보낸 쿠키 읽기
Cookie[] cookies = request.getCookies();
읽기 관련 주요 메서드
getName() : 쿠키의 이름을 구한다.
getValue() : 쿠키의 값을 구한다.
예제) 쿠키 생성하기 makeCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
Cookie cookie = new Cookie("name", "Hong");
response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 생성</title>
</head>
<body>
<ul>
<li>쿠키의 이름 = <%= cookie.getName() %></li>
<li>쿠키의 값 = "<%=cookie.getValue() %>"</li>
</ul>
</body>
</html>
- 쿠키의 이름 = name
- 쿠키의 값 = "Hong"
예제) 쿠키 읽어오기 viewCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.net.URLDecoder" %> 한글을 표시하기 위해 Decoder 사용
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie 정보 보기</title>
</head>
<body>
<h3>쿠키 목록</h3>
<%
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
%>
<ul>
<li>쿠키이름: <%= cookie.getName() %></li>
<li>쿠키값: <%= URLDecoder.decode(cookie.getValue(), "utf-8") %></li>
</ul>
<%
}
}
%>
</body>
</html>
쿠키 목록
- 쿠키이름: JSESSIONID
- 쿠키값: EA94C79163E7587A083F76569EFBFDAD
- 쿠키이름: only
- 쿠키값: onlycookie
- 쿠키이름: name
- 쿠키값: 홍길동
3) 쿠키 값 변경 modifyCookie.jsp
기존에 존재하는 지 확인 후, 쿠키 값 새로 설정
<%@page import="java.net.URLEncoder"%>
쿠키값: EA94C79163E7587A083F76569EFBFDAD
쿠키이름: only
쿠키값: onlycookie
쿠키이름: name
쿠키값: CHANGE
4) 쿠키 삭제
쿠키 삭제 기능은 별도로 제공하지 않으며, 유효 시간을 0으로 지정해준 후 응답 헤더에 추가해주면, 웹브라우저가 관련 쿠키를 삭제.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.net.URLEncoder" %>
<%
Cookie[] cookies = request.getCookies();
if(cookies !=null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if(cookie.getName().equals("name")) {
Cookie cookie1 = new Cookie("name", "");
cookie1.setMaxAge(0); // 유효시간 0으로 지정되어 해당 name 쿠키 삭제됨.
response.addCookie(cookie1);
}
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 삭제</title>
</head>
<body>
</body>
</html>
5) 쿠키의 도메인과 경로
기본적으로 쿠키는 그 쿠키를 생성한 서버에만 전송
도메인 지정 시, 해당 도메인에 쿠키 전달
- Cookie.setDomain()으로 쿠키 설정
- 도메인 형식
.somehost.com : 점으로 시작하는 경우 관련 도메인에 모두 쿠키를 전송한다.
www.somehost.com : 특정 도메인에 대해서만 쿠키를 전송한다.
웹 브라우저는 도메인이 벗어난 쿠키는 저장하지 않음
쿠키 도메인에 따라 쿠키가 전달
only 쿠키를 javacan.madvirus.net 서버에서 생성했다고 한 경우
자기 서버의 도메인 임시로 변경
Windows 7/8에서 C:\Windows\System32\driver\etc 폴더에서 host 파일에
127.0.0.1 www.somehost.com을 추가한다. 그러면 자신의 로컬호스트가 입력한 주소로 인식한다.
(127.0.0.1은 자기 컴퓨터의 주소) 즉, http://localhost가 입력한 도메인으로 인식하게 된다.
예제) 서로 다른 3개의 설정을 가진 3개의 쿠키를 생성 makeCookieWithDomain.jsp
only = onlycookie [null]
ivonly = onlycookie [javacan.tistory.com]
쿠키 목록
- 쿠키이름: id
- 쿠키값: madvirus
쿠키 목록
- 쿠키이름: path1
- 쿠키값: 경로:/chap09/path1
- 쿠키이름: path2
- 쿠키값: 경로:
- 쿠키이름: JSESSIONID
- 쿠키값: 6B05A59B1119B135A8F0396AD9BA761A
- 쿠키이름: path3
- 쿠키값: 경로:/
쿠키 목록
- 쿠키이름: path4
- 쿠키값: 경로:/chap09/path2
- 쿠키이름: JSESSIONID
- 쿠키값: 6B05A59B1119B135A8F0396AD9BA761A
- 쿠키이름: path3
- 쿠키값: 경로:/
'JSP' 카테고리의 다른 글
세션(session) (0) | 2016.03.09 |
---|---|
실습: 쿠키를 사용한 로그인 유지 (0) | 2016.03.09 |
실습: JSP form에서 받아온 값을 자바빈에 담아 출력하기 (0) | 2016.03.08 |
자바빈과 <jsp:useBean> 액션 태그 (0) | 2016.03.07 |
페이지 모듈화 & 요청 흐름 제어 (0) | 2016.03.07 |