JSP - cookie

imjingu·2023년 9월 11일
0

개발공부

목록 보기
472/481

쿠키(cookie)

최근 사용 용도

  • 자동 로그인
  • 팝업 오늘만 보기
  • 로그 관련 내용 (예: 가격 비교를 통해 들어옴)
  • 브라우저의 랜더링 관련 내용
  • 브라우저에서 쿠키 정보 보기

장점
클라이언트의 일정 폴더에 정보를 저장하기 때문에 웹서버의 부하를 줄일 수 있음.

단점
웹브라우저가 접속했던 웹 사이트에 관한 정보와 개인정보가 기록되기 때문에 보안에 문제가 있음.
이러한 보안상의 문제를 해소하기 위해 웹 브라우저 자체에 쿠키 거부 기능이 추가.
쿠키에 대한 거부가 웹 브라우저에 설정되어 있으면 쿠키의 본래의 목적인 웹 브라우저와의 연결을 지속시키는기능을 수행할 수 없음.

다음 화면처럼 쿠키는 입력받은 id 와 password 가 모두 표시되어 보안에 취약

쿠키 생성하기

1) 전송된 아이디와 비밀번호가 일치하면, 쿠키 이름 userId, userPw에 값을 설정하도록 Cookie 객체를 생성
2) 생성된 Cookie 객체를 쿠키로 저장하도록 response 내장 객체의 addCookie() 메서드를 작성하고 성공 메시지를 출력
3) 일치하지 않으면 실패 메시지를 출력

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie</title>
</head>
<body>
	<form action="cookie01_process.jsp" method="post">
		<p> 아이디 : <input type="text" name="id">
		<p> 비밀번호 : <input type="password" name="passwd">
		<input type="submit" value="전송">
	</form>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie</title>
</head>
<body>
	
	 <%
	 	String userId = request.getParameter("id"); // 입력받은 id의 정보를 가져와 userId에 저장
	 	String userPw = request.getParameter("passwd"); // 입력받은 passwd의 정보를 가져와 userPw에 저장
	 	
	 	if(userId.equals("admin") && userPw.equals("1234")) { 
	 	// 입력받은 userId와 문자열 admin이 같고 입력받은 userPw와 문자열 1234가 같으면, 로그인 정보가 맞으면
	 		Cookie cookieId = new Cookie("userId", userId); // 쿠키 생성. Cookie클래스를 이용해서 쿠키 객체 생성
	 		Cookie cookiePw = new Cookie("userPw", userPw);
	 		response.addCookie(cookieId); // response할때 쿠키도 같이 보낼것 클라이언트 에게
	 		response.addCookie(cookiePw);
	 		out.println("쿠키 생성이 성공했습니다.");
	 		out.println(userId + "님 환영합니다.");
	 	} else {
	 		out.println("쿠키 생성이 실패했습니다.");
	 	}
	 %>
</body>
</html>


저장된 모든 쿠키 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie</title>
</head>
<body>
	<%
		boolean isLogin = false;
		String userId = "";
		Cookie[] cookies = request.getCookies(); // cookie01_process로 쿠키를 생성해서 host8080에 저장해 놨음, 그래서 request해서 쿠키를 얻어옴
		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>");
			if(cookies[i].getName().equals("userId") && cookies[i].getValue() != null) {
				// userId라는 쿠키 이름이 있고 그 userId의 value가 null이 아니면 로그인한 것으로 간주
				isLogin = true;
				userId = cookies[i].getValue();
			}
		}
		// out.print(isLogin);
		if (isLogin) { // boolean 으로 로그인이 되면 true 가 반환되고 아니라면 false 반환
			out.println(userId + " 님 로그인 중 입니다.");
		}
		else {
			out.println("로그인 상태가 아닙니다.");
		}
	%>
</body>
</html>


쿠키 객체에 저장된 모든 쿠키 삭제하기

1) 쿠키 정보를 얻어오도록 request 내장 객체의 getCookies() 메서드 작성
2) 얻어온 모든 쿠키를 삭제하도록 Cookie 객체의 setMaxAge() 메서드에 유효 기간을 0으로 설정
3) 웹페이지 cookie02.jsp로 이동하도록 response 내장 객체의 sendRedirect() 메서드를 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie</title>
</head>
<body>
	
	<%
		Cookie[] cookies = request.getCookies(); // 쿠키를 불러옴
	
		for (int i = 0; i < cookies.length; i++) {
			cookies[i].setMaxAge(0); // 모든 쿠키의 유효기간을 0으로 설정
			response.addCookie(cookies[i]); // 유효기간을 0 으로한 쿠키로 덮어씀
		}
		response.sendRedirect("cookie02.jsp"); // 웹페이지 이동
	%>
</body>
</html>

0개의 댓글