웹 브라우저에서 서버로 어떤 데이터를 요청하면 서버에서 알맞은 로직을 수행한 후 데이터를 웹 브라우저에 응답
Http 프로토콜은 응답 후 웹 브라우저와의 관계를 종료
관계를 종료하는 Http 프로토콜의 특성을 보완하기 위해 쿠키를 사용(메모지에 따로 써놓는다고 생각하면 될려나?)
정보 유지 수단
연결이 끊겼을 때 어떤 정보를 지속적으로 유지하기 위한 수단으로 Cookie라는 방식을 사용
쿠키는 서버에서 생성하여 서버가 아닌 클라이언트에 정보를 저장
연결이 끊겼을 때 다시 서버에 요청을 할 때에는 요청과 쿠키를 같이 서버에 보냄
쿠키는 그냥 이전 요청과 응답의 정보를 클라이언트에 저장된 정보라고 생각하면 될려나?
내가 생각한 쿠키 장점 : 쿠키는 사용자에 저장되므로 새로운 요청이 있을 때 쿠키와 같이 요청하기 때문에 로그인 유지 및 정보 유지를 사용하여 진행하는 것에서 편리할 듯?
Cookie 확인
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
// 쿠기 생성 방법
// 1. 쿠키 객체를 생성 - 생성자의 매개값으로 쿠키의 이름과 저장할 데이터를 입력(String만 유효)
String id = "abc1234";
Cookie idCoo = new Cookie("id_cookie", id);
Cookie nameCoo = new Cookie("name_cookie", "홍길동");
// 임포트 없이 사용 가능
// 쿠키는 생성자에 이름과 매개값을 지정해야함
// 2. 쿠키 클래스의 setter 메서드로 쿠키의 속성을 설정
nameCoo.setMaxAge(60*60);
idCoo.setMaxAge(30);
// 쿠키를 유지할 시간 설정(초단위)
/*
setPath(): 쿠키 디렉토리 설정 (필수)
setValue() : 쿠키 값 설정
setMaxAge() 쿠키 유효시간 설정
getName() : 쿠키 이름을 얻음
getValue() : 쿠키 값을 얻음
*/
// 3. http 응답 시 response 객체에 생성된 쿠키를 탑재하여 클라이언트로 전송
response.addCookie(nameCoo);
response.addCookie(idCoo);
// 내가 요청을 하면 서버가 화면에 표시하는게 응답
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="cookie_check.jsp">쿠키 확인</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
// 클라이언트 쪽에서 전송된 쿠키를 가져오는 방법
Cookie[] cookies = request.getCookies();
// 저장되어 있는 쿠키를 모두 줌 (return Cookie [])
boolean flag = false;
// 쿠키 존재 유무 파악 변수
// 쿠키가 있다면 true로 반환될 예정
if (cookies != null){
for (Cookie c : cookies){
if(c.getName().equals("id_cookie")){
// getName() : 쿠키 이름을 가져오는 메서드
out.print("<h3> 아이디 쿠키가 존재합니다! </h3>");
String value = c.getValue();
// getValue() : 쿠기 내부 값을 얻어오는 메서드
out.print("쿠키의 값 : " +value);
flag = true;
break;
}
}
if (!flag){
out.print("<h3> 찾으시는 쿠키가 없습니다. </h3>");
}
}
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href = "cookie_check_all.jsp">모든 쿠키 확인</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for(Cookie c : cookies) {
String name = c.getName();
String value = c.getValue();
// cookies에 저장된 쿠키의 이름과 값을 출력
out.print(name + " : " + value + "<br>");
out.print("-----------------------------<br>");
}
}
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
cookie_login에서 값을 입력
cookie_login_con에서 특정 조건(id & pw가 맞는지)에 맞도록 쿠키를 생성
쿠키와 새로운 요청을 서버에 전달(요청)하고 생성된 쿠키의 값들을 비교해서 특정 조건에 맞게 cookie_welcome에서 실행
welcome에서 서버에 새로운 요청을 하게 되면 같이 가는 쿠키를 비교하여 또 특정 조건에 맞게 출력
쿠키는 데이터의 정보 유지를 위해 사용한다고 생각
cookie_login
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%--
- 생성된 login_cookie 쿠키를 검색하여 쿠키가 이미 존재한다면
로그인 폼 대신 브라우저에 "이미 로그인한 사용자입니다." 를 출력 후
welcome 페이지로 이동할 수 있는 링크를 제공하세요.
- login_cookie가 없는 사용자는 로그인 입력창이 등장하도록 구성하세요.
--%>
<%
Cookie [] cookies = request.getCookies();
boolean flag = false;
String remember_id = "";
// 아이디 기억하기 쿠키에서 값을 꺼내서 채울 변수.
if (cookies != null){
for (Cookie c : cookies) {
if (c.getName().equals("login_cookie")){
flag = true;
break;
// 로그인 유지 쿠키
}
if (c.getName().equals("remember_id")) {
remember_id = c.getValue();
// 아이디 기억하기 쿠키
}
}
}
// flag가 true면 login 중이고 false이면 login 안함
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% if (!flag) {
// flag가 true가 아니면
%>
<form action="cookie_login_con.jsp" method = "post">
<input type = "text" name = "id" size = "10" placeholder="ID" value = "<%= remember_id %>">
<input type = "checkbox" name = "id_remember" value = "true"> <small style = "font-size : 0.7em">아이디 기억하기</small>
<br>
<input type = "password" name = "pw" size = "10" placeholder="PW"><br>
<input type = "submit" value = "로그인">
</form>
<% } else { %>
<h2> 이미 로그인한 사용자 입니다.</h2>
<a href = "cookie_welcome.jsp">이동</a>
<% } %>
</body>
</html>
cookie_login_con
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
if(id.equals("abc1234") && pw.equals("aaa1111")) {
// 로그인 성공이라면
System.out.println("로그인 성공");
Cookie loginCoo = new Cookie("login_cookie", id);
loginCoo.setMaxAge(5);
// 로그인은 5초 유지
response.addCookie(loginCoo);
// 쿠키가 클라이언트에게 가서 응답할 때 같이 전송되도록
System.out.println("쿠키 생성");
if (request.getParameter("id_remember") != null){
// 체크박스 체크 유무 확인
System.out.println("체크");
Cookie idMemory = new Cookie("remember_id", id);
idMemory.setMaxAge(30);
response.addCookie(idMemory);
// send.Redirect 할 때 쿠키 값 보내기 위해 사용
}
response.sendRedirect("cookie_welcome.jsp");
// 로그인이 성공하면 위의 창으로 보냄
// 이 요청과 함께 쿠키가 같이 서버에 요청됨
}
else {
response.sendRedirect("cookie_login.jsp");
// 값이 틀리면 다시 입력할 수 있는 창으로 보냄
}
%>
cookie_welcome
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
Cookie[] cookies = request.getCookies();
String userID = null;
if (cookies != null) {
for (Cookie c : cookies){
if (c.getName().equals("login_cookie")){
// 로그인을 성공했을때만 부여되는 쿠키
userID = c.getValue();
break;
}
}
}
// userID에 null 이거나 사용자의 id가 들어가있음
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
if (userID != null){ // 아직 로그인 중%>
<p>
<%=userID %>님 환영합니다! <br>
<a href = "cookie_login.jsp">로그인 화면으로</a>
</p>
<% } else { // 로그인을 안했거나 로그인 시간이 끝나 특정 쿠키가 없을 때 %>
<p>
시간이 지나 자동 로그아웃 처리되었습니다<br>
<a href = "cookie_login.jsp">로그인 화면으로</a>
</p>
<% }%>
</body>
</html>