ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSP | Cookie
    JAVA/JSP 2020. 2. 22. 22:12

    Cookie

    HTTP 프로토콜에서 상태를 유지하기 위한 방법 중 하나
    쿠키 파일에 사용자 정보를 저장해서 상태를 유지하는 방법


    HTTP

    HTTP(Hypertext Transfer Protocol)
    웹 서버와 웹 브라우저 간 하이퍼텍스트 문서 전송을 위해 사용하는 프로토콜

    • 상태가 없음(stateless) 즉, 웹 브라우저의 요청에 대한 응답을 하고 나면
      해당 클라이언트와의 연결을 지속하지 않음
    • 이전에 무엇을 했고 지금 무엇을 하는지에 대한 정보를 갖고 있지 않음
    • 연결이 지속되지 않기 때문에 클라이언트를 구분할 수 없음

    ※ 연결을 유지하는(stateful) 프로토콜: FTP, Telnet


    HTTP에서 상태를 유지하기 위한 방법

    1. URL Rewriting: GET형식에서만 사용 가능
      다른 페이지로 이동할 때 URL의 뒷 부분 정보(URI)를 가지고 다니는 방법
      정보의 양이 제한되어 있으며 보안에 문제가 있음
    2. Hidden Form Field: POST 방식으로 처리하기 위한 방법
      HTML의 < form > 태그와 < input > 태그의 숨겨진 텍스트 필드 이용
      텍스트 필드를 이용해서 값을 계속 가지고 다녀야 하는 번거로움이 있음
    3. Cookie: 웹 사이트에 접속할 때 생성되는 정보를 파일에 저장해서 관리하는 방법
    4. Session: 클라이언트에 세션 ID를 부여해서 클라이언트를 구분하는 방법

    Cookie 개요

    웹 사이트에 접속할 때 생성되는 정보를 저장한 임시 파일

    • 사용자 정보 유지 및 접속 편의성을 목적으로 함
    • 웹 브라우저의 정보를 웹 브라우저에 저장
      클라이언트의 하드디스크에 저장됨(C:/~/사용자/Cookies)
    • 이후에 서버로 전송되는 요청에는 쿠키가 가지고 있는 정보가 같이 포함되어서 전송
    • 웹 서버는 웹 브라우저의 요청에 포함되어 있는 쿠키를 읽어서
      새로운 웹 브라우저인지 이전에 요청을 했던 브라우저인지 판단
    • 일반적으로 4KB 이하의 크기로 생성
    • 생성된 쿠키를 HTTP Header에 포함시켜 Response로 전송

    Cookie 단점

    • 웹 브라우저가 방문했던 웹 사이트에 대한 정보 및 개인 정보가 기록되기 때문에
      개인의 사생활 및 정보를 침해할 소지가 있다는 치명적인 단점이 있음

      → 웹 브라우저에 쿠키 거부 기능이 추가됨
    • 쿠키 거부가 설정되어 있으면 웹 브라우저와의 연결을 지속할 수 없음
      → 이러한 문제점 때문에 최근에는 Session(세션)을 많이 사용함

    JSP에서 Cookie 사용

    Cookie 생성

    javax.servlet.http 패키지에 있는 Cookie 클래스 객체를 생성
    JSP 파일이 서블릿으로 변환될 때 자동 import 되기 때문에 따로
    import문을 작성하지 않아도 됨

    Cookie cookie = new Cookie(String name, String value);
    • cookie 이름은 알파벳과 숫자로만 구성
    • name 매개 변수로 쿠키 이름 지정
    • value 매개 변수로 쿠키에 해당하는 값 설정
    • value 값으로 한글 지정 가능
      따로 인코딩할 필요 없음

    Cookie 수명 지정

    cookie.setMaxAge(int expiry);
    • 초 단위로 쿠키 유효 기간 설정
    • 지정한 기간만큼만 쿠키가 유효함
      시간 초과 시 사용기간이 만료되며 더 이상 사용되지 않음

    Cookie 값 수정

    cookie.setValue(String newValue);
    • 처음에 쿠키 이름과 함께 지정했던 쿠키 값을 newValue로 변경

    Cookie 전송

    response.addCookie(Cookie cookie);
    • 웹 클라이언트로 보내는 응답 정보를 갖고 있는
      response 객체에 cookie 객체 추가

    Cookie 읽기

    Cookie[] cookies = request.getCookies();
    • 요청 정보를 갖는 request 객체에서 쿠키를 읽어 들임
    • getCookie() 메소드는 웹 브라우저에 저장된
      모든 쿠키를 읽어 오기 때문에 리턴 타입을 Cookie[]로 지정

    Cookie 이름 & 값 얻어오기

    <!-- 이름 반환 -->
    cookie.getName();
    
    <!-- 값 반환 -->
    cookie.getValue();

    예제

    쿠키를 만들고 불러와서 출력하는 예제

    makeCookie.jsp

    쿠키를 생성하는 JSP 파일

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Make a Cookie</title>
    </head>
    <body>
        <%
            // 1. 쿠키생성 -> 이름, 저장할 값 지정
            String cookieName = "myCookie";
            Cookie cookie = new Cookie(cookieName, "apple");
    
            // 2. 쿠키 기본값 설정
            cookie.setMaxAge(60 * 2);
    
            // 3. 쿠키 값 변경
            cookie.setValue("Melon");
    
            // 4. 쿠키 전송
            response.addCookie(cookie);
        %>
    
        <h2>쿠키가 생성되었습니다.</h2>
        <br /> 쿠키의 내용은
        <a href="useCookie.jsp">여기서 확인 가능</a>
    
    </body>
    </html>

    useCookie.jsp

    쿠키를 읽어 들여서 출력하는 JSP 페이지

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Read Cookie</title>
    </head>
    <body>
    <%
        // 모든 쿠키를 읽어 와서 쿠키 배열에 저장
        Cookie[] cookies = request.getCookies();
    
        // 쿠키가 있는 경우 실행
        if(cookies != null){
            // 배열 형태로 저장했기 때문에 확장 for문 사용
            for(Cookie cookie : cookies){
                // cookie 이름이 myCookie 라면 아래와 같이 출력
                if(cookie.getName().equals("myCookie")){ %>
                    cookieName: <%=cookie.getName()%> <br />
                    cookieValue: <%=cookie.getValue()%>                
        <%  }
            }
        }
    %>
    </body>
    </html>

    결과


    HTTP 프로토콜에서 클라이언트의 정보를 유지하는 방법 중 하나인 쿠키의 개요와 사용법에 대해 알아보았습니다.

    쿠키는 웹 클라이언트에 특정 내용의 파일을 전송해서
    이후부터 해당 파일의 내용으로 클라이언트를 구분하는 방식입니다.

    사용자의 접속 정보 및 개인 정보가 파일로 저장되기 때문에 보안에 취약하다는 문제점이 있습니다.

    이러한 문제로 최근에는 세션을 사용한다고 하지만 세션은 관리하기가 어렵기 때문에
    여전히 쿠키를 사용하는 경우도 많다고 합니다.

    'JAVA > JSP' 카테고리의 다른 글

    JSP | XML 기초 문법 & 서블릿 설정  (0) 2020.02.22
    JSP | Session  (0) 2020.02.22
    JSP | JavaBean Action Tag 자바빈 연동 액션 태그  (0) 2020.02.20
    JSP | JavaBean 자바빈  (0) 2020.02.20
    JSP | Template Page  (0) 2020.02.20

    댓글

Designed by Tistory.