-
JSP | CookieJAVA/JSP 2020. 2. 22. 22:12
Cookie
HTTP 프로토콜에서 상태를 유지하기 위한 방법 중 하나
쿠키 파일에 사용자 정보를 저장해서 상태를 유지하는 방법
HTTP
HTTP(Hypertext Transfer Protocol)
웹 서버와 웹 브라우저 간 하이퍼텍스트 문서 전송을 위해 사용하는 프로토콜- 상태가 없음(stateless) 즉, 웹 브라우저의 요청에 대한 응답을 하고 나면
해당 클라이언트와의 연결을 지속하지 않음 - 이전에 무엇을 했고 지금 무엇을 하는지에 대한 정보를 갖고 있지 않음
- 연결이 지속되지 않기 때문에 클라이언트를 구분할 수 없음
※ 연결을 유지하는(stateful) 프로토콜: FTP, Telnet
HTTP에서 상태를 유지하기 위한 방법
- URL Rewriting: GET형식에서만 사용 가능
다른 페이지로 이동할 때 URL의 뒷 부분 정보(URI)를 가지고 다니는 방법
정보의 양이 제한되어 있으며 보안에 문제가 있음 - Hidden Form Field: POST 방식으로 처리하기 위한 방법
HTML의 < form > 태그와 < input > 태그의 숨겨진 텍스트 필드 이용
텍스트 필드를 이용해서 값을 계속 가지고 다녀야 하는 번거로움이 있음 - Cookie: 웹 사이트에 접속할 때 생성되는 정보를 파일에 저장해서 관리하는 방법
- 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 - 상태가 없음(stateless) 즉, 웹 브라우저의 요청에 대한 응답을 하고 나면