✔️ 클라이언트 식별 기술
✔️ 웹 브라우저가 보관하는 데이터
웹 브라우저는 웹 서버에 요청을 보낼 때 쿠키를 함께 전송
➡️ 웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를 읽음
➡️ 서버와 브라우저의 상태값을 유지
JSP에서 생성하는 쿠키는 웹 서버에서 생성하는 쿠키이다.
: 쿠키는 웹 서버와 웹 브라우저 양쪽에서 생성할 수 있다. 하지만, 클라이언트에서 쿠키를 만드는 것은 효력이 없다. 서버에서 모든 것을 처리하기 때문에 상태 정의값은 서버만 내릴 수 있기 때문이다.
데이터를 서버가 다 전적으로 저장하지 않고 브라우저에 (상태)저장을 맡긴다.
➡️ 브라우저가 관리를 하는 것은 한계가 있다. 보조적인 수단으로 사용되는 방식.
➡️ 모든 브라우저에는 쿠키를 허용하지 않는 옵션이 있다. 그 옵션을 누르면 브라우저는 쿠키를 저장하지 않게 된다. 그래서 쿠키는 상황마다 다를 수 밖에 없고 보조적인 수단으로 사용되어야 한다.
📚 예를 들어, 서버는 도서관이고 쿠키는 도서관을 출입하고 책을 빌릴 수 있는 id카드라고 생각하면 된다. 그래서 사용자는 그 id카드를 버릴 수도 있고 도서관이 준 카드를 거부할 수도 있다. 도서관측에서는 사용자의 id카드를 가지고 누가 누군지 구별할 수 있게 된다.💳
1. 쿠키 생성 단계
2. 쿠키 저장 단계
3. 쿠키 전송 단계
웹 브라우저에 쿠키가 저장되면, 웹 브라우저는 쿠키가 삭제되기 전까지 웹 서버에 쿠키를 전송한다. 따라서 웹 어플리케이션을 사용하는 동안 지속적으로 유지해야 하는 정보는 쿠키를 사용해서 저장하면 된다.
이름 ⭐️ : 각각의 쿠키를 구별하는 데 사용되는 이름
값 ⭐️ : 쿠키의 이름과 관련된 값
유효시간: 쿠키의 유지 시간
도메인: 쿠키를 전송할 도메인 (localHost8080)
경로: 쿠키를 전송할 요청 경로 (웹 어플리케이션 이름부터 시작)
응답 파라미터를 받을 때에도 이름과 값을 받듯이, 쿠키의 핵심 요소도 이름과 값이다.
✔️ 쿠키 식별자 = 이름
하나의 웹 브라우저는 여러 개의 쿠키를 가질 수 있다.
➡️ 각 쿠키를 구분할 때 이름을 사용한다.
각 쿠키는 값을 가진다.
➡️ 서버는 이 값을 사용해서 원하는 작업을 수행한다.
✔️ 쿠키 이름은 알파벳과 숫자만 이용한다.
✔️ 쿠키의 유지시간 ➡️ 웹 브라우저가 쿠키를 얼마 동안 보관할지 지정 가능
✔️ Cookie cookie = new Cookie("쿠키 이름", "쿠키 값");
respose.addCookie(cookie);
response.addCookie(cookie)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>
// 추가할 쿠키 정보를 담고 있는 Cookie 객체 생성
// URLEncoder 클래스를 사용해서 쿠키 값을 인코딩한다.
<%
Cookie cookie = new Cookie("name", URLEncoder.encode("JTI", "utf-8"));
response.addCookie(cookie); // 응답 데이터에 쿠키를 추가
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 생성</title>
</head>
<body>
<%= cookie.getName()%> 쿠키의 값 = <%= cookie.getValue() %>
</body>
</html>
✔️ Cookie[] cookies = request.getCookies();
request.getCookies()
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 목록</title>
</head>
<body>
쿠키 목록<br>
<%
// 쿠키 배열을 구한다. 쿠키가 없으면 null을 리턴한다.
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length > 0) {
for(int i = 0; i < cookies.length; i++) {
%>
<%= cookies[i].getName() %> =
<%= cookies[i].getValue() %><br>
<%
}
} else {
%>
쿠키가 존재하지 않습니다.
<%
}
%>
</body>
</html>
JSESSIONID 쿠키
: session ID를 저장하는 데 사용됨
: JSP 페이지를 방문하는 각 사용자에게 고유한 ID를 제공함
: JSP / Servlet에서 세션 관리를 위해 사용됨
Idea-c19e5daf 쿠키 (이게 나만 떠서 뭔가 싶었네;;)
: IntelliJ IDEA 또는 기타 JetBrains IDE(통합 개발 환경)를 사용할 때 자동으로 생성됨
: 해당 IDE에서는 이 쿠키를 사용하여 세션 ID를 저장하고 관리함
✔️ Cookie cookie = new Cookie("쿠키 이름", "새로운 값");
respose.addCookie(cookie);
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 쿠키 배열 뽑아옴.
Cookie[] cookies = request.getCookies();
if(cookies != null & cookies.length > 0) {
for(int i = 0 ; i < cookies.length; i++) {
// name 쿠키가 존재할 경우, "name"인 쿠키 객체를 새롭게 생성해서 응답 헤더에 추가
if(cookies[i].getName().equals("name")) {
Cookie cookie = new Cookie("name", "PJI");
response.addCookie(cookie);
}
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 값 변경</title>
</head>
<body>
name 쿠키의 값을 변경합니다.
</body>
</html>
✔️ Cookie cookie = new Cookie("쿠키 이름", "쿠키 값");
cookie.setMaxAge(0);
respose.addCookie(cookie);
cookie.setMaxAge(0);
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//쿠키 배열 뽑아옴.
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);
}
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 삭제</title>
</head>
<body>
name 쿠키를 삭제합니다.
</body>
</html>
✔️ Cookie cookie = new Cookie("쿠키 이름", "쿠키 값");
cookie.setDomain("도메인");
respose.addCookie(cookie);
기본적으로 쿠키는 그 쿠키를 생성한 서버에만 전송된다. 하지만 네이버를 생각해보면, naver.blog, naver.cafe, naver.weebtoon 처럼 같은 도메인을 사용하는 모든 서버에 쿠키를 보내야 할 때가 있다.
cookie.setDomain("도메인");
.somehost.com
⭐️
: 상위 도메인
: 점으로 시작하는 경우 관련 도메인에 모두 쿠키를 전송
: 대부분 이 방법을 많이 씀
www.somehost.com
: 특정 도메인에 대해서만 쿠키 전송
❗️ 보안문제로 인해 웹 브라우저는 타 도메인으로 지정한 쿠키를 받지 않는다.
➡️ 웹 브라우저는 현재 서버의 도메인과 다른 도메인에 대한 쿠키 생성은 허용하지 않는다.
✔️ Cookie cookie = new Cookie("쿠키 이름", "쿠키 값");
cookie.setPath("/");
respose.addCookie(cookie);
/05_02/path2/viewCookies.jsp
❗️ 쿠키 경로는
/
로 지정
: 일반적으로 쿠키는 웹 어플리케이션에 포함된 다수의 JSP와 Servlet에서 사용하기 때문
✔️ Cookie cookie = new Cookie("쿠키 이름", "쿠키 값");
cookie.setMaxAge();
respose.addCookie(cookie);
cookie.setMaxAge()
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.URLEncoder" %>
<%
Cookie cookie = new Cookie("time", "1time");
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 유효시간 설정</title>
</head>
<body>
유효시간이 1시간인 time 쿠키 생성.
</body>
</html>
❗️ 아이디 기억하기 기능의 구현 방법 ➡️ 쿠키 이용
- 사용자가 로그인에 성공하면 아이디를 값으로 저장하고 있는 쿠키의 유효시간을 1달 정도로 여유롭게 잡아서 생성한다.
- 비슷한 방식으로 로그인 정보를 쿠키에 보관하면 자동 로그인 기능을 구현할 수도 있다.