
개개인을 구분하기 위한 서비스
- 세션과 마찬가지로 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법입니다.
- 세션과 달리 상태 정보를 웹서버가 아닌 클라이언트에 저장합니다.
- 쿠키는 클라이언트의 정보를 웹 브라우저에 저장하므로 이후에 웹 서버로 전송되는 요청에는 쿠키가 가지고 있는 정보가 포함됩니다.
- 웹 브라우저가 접속했던 웹 사이트에 관한 정보와 개인 정보가 기록되기 때문에 보안에 문제가 있습니다.


개개인을 구분하기 위해 쿠키가 필요하다.
브라우저가 서버쪽으로 쿠키 보내줌~
쿠키도 등록, 조회, 삭제가 주된 작업일것이다.
등록 -> 데이터가 필요한 주체 = 서버, 서버가 등록 요청
어떻게?? -> 브라우저에게 등록해달라고 요청함
조회 -> request
👩🏫
쿠키 조회: HttpServletRequest - Cookie[] getCookies()
◾요청 헤더를 통해서 넘어온 데이터니까!
쿠키 등록: HttpservletResponse - void addCookie(Cookie cookie)
◾호출하면 응답헤더에 Set-Cookie가이름-값형태로 저장된다.
◾브라우저가 응답 헤더를 바탕으로 쿠키 값을 등록
HttpServletRequest 인터페이스

쿠키 객체 배열 형태로 반환되어 나옴
HttpServletResponse 인터페이스

이거 보고 응답 헤더 생성
🔖쿠키 클래스

Cookie(String name, String value)

#쿠키 생성자 사용예시
<%@ page contentType="text/html; charset=UTF-8"%>
<%
Cookie cookie = new Cookie("memberId","admin");
response.addCookie(cookie);
%>
#cookie01.jsp파일
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Cookie</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 contentType="text/html; charset=utf-8"%>
<html>
<head>
<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>


브라우더가 이 헤더를 보고 저장한다.

이 데이터는 서버가 필요하다!
매 요청시마다 요청 헤더에 실려서 쿠키 데이터가 전송된다.

setMaxAge -> 쿠키 유효시간을 설정setHttpOnly(): ✔false 

Cookie[] requst.getCookies()getCookies -> 전체 쿠키 내용 조회# getCookies()메서드 사용 예시
Cookie[] cookies = request.getCookies();


#cookies02.jsp 파일
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Cookie</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>

setMaxAge -> 쿠키의 최대 수명을 초 단위로 설정합니다.(쿠키 유효시간을 설정)

✅ void setMaxAge(int age) 메서드에 유효 기간을 0으로 설정하여 쿠키를 삭제할 수 있다.


브라우저 만료시 삭제됨
1970.1.1 0:0:0/ 현재 시간보다 이전 시간으로 설정하면 브라우저가 삭제한다.

서버가 알려주고 삭제는 브라우저가!

#cookie03.jsp 파일
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>Cookie</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>

쿠키 jsp에서 만들었던 쿠키들은 다 삭제되었다!

이 경로에서 쿠키 데이터가 유지된다.( 현재있는 경로가 기본 경로가 됨)
-> day05 (contextPath)
-> day05/하위경로
가능⭕⭕🙆♀️

경로 바꿨을때!
🔽🔽

key 없다!!
범위를 전역으로 설정해주고싶을땐 setPath()를 이용해서 설정을 바꿀 수 있다.


🔽이 path를 포함한 하위 경로이면(contextPath)다른쪽에서도 공유가능한걸 확인할 수 있당🔽

쿠키는 매 요청시마다 요청헤더를 통해서 개인 데이터가 전송 된다 -> 보안에 취약
매번 네트워크를 통해서 전송되므로, 네트워크에 부담이 됨
세션은 서버가 살아있는 동안 유지
개인 데이터를 서버에 저장하는 기술: 세션
개인 데이터를 서버에 저장하므로 브라우저가 보내줄 필요 없다.

세션 id로 구분!!!!
개인 서비스제공 기술 ~~
HttpSession
void setAttribute(String name, Object value);

조회는 서블릿클래스 내에서 조회해보자

Object getAttribute(String name);


요청 처리하면서 세션쪽 개인 데이터를 가져옴

void removeAttribute(String name);


title 삭제되었다.
invalidate(): 세션 데이터 비우기

활동 안할때 살아있는 시간 ex) 은행 로그인 상태
