Cookie

sig6774·2022년 5월 19일
0

JSP

목록 보기
3/12

JSP

  • Cookie
    • 웹 브라우저에서 서버로 어떤 데이터를 요청하면 서버에서 알맞은 로직을 수행한 후 데이터를 웹 브라우저에 응답

    • Http 프로토콜은 응답 후 웹 브라우저와의 관계를 종료

    • 관계를 종료하는 Http 프로토콜의 특성을 보완하기 위해 쿠키를 사용(메모지에 따로 써놓는다고 생각하면 될려나?)

    • 정보 유지 수단

    • 연결이 끊겼을 때 어떤 정보를 지속적으로 유지하기 위한 수단으로 Cookie라는 방식을 사용

    • 쿠키는 서버에서 생성하여 서버가 아닌 클라이언트에 정보를 저장

    • 연결이 끊겼을 때 다시 서버에 요청을 할 때에는 요청과 쿠키를 같이 서버에 보냄

      • ex) 쿠키가 없으면 로그인을 완료하고 요청을 종료하기 때문에 반복 로그인을 해야 하는데 쿠키가 있으면 로그인을 완료하고 로그인 완료 정보가 저장되어 쿠키와 요청을 다시 같이 보내기 때문에 로그인을 유지하면서 서비스를 이용할 수 있음
    • 쿠키는 그냥 이전 요청과 응답의 정보를 클라이언트에 저장된 정보라고 생각하면 될려나?

    • 내가 생각한 쿠키 장점 : 쿠키는 사용자에 저장되므로 새로운 요청이 있을 때 쿠키와 같이 요청하기 때문에 로그인 유지 및 정보 유지를 사용하여 진행하는 것에서 편리할 듯?

    • 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에서 값을 입력

    • 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>

profile
안녕하세요! 공부한 내용을 기록하는 공간입니다.

0개의 댓글