쿠키(Cookie)

박주현·2022년 12월 14일
0

국비 공부

목록 보기
29/44
post-thumbnail

쿠키 (cookie)

  • 인터넷 서비스에서는 연결(Connection)이 지속
  • 인터넷에서 사용 가능한 웹 서비스로는 ftp, http 등 프로토콜(표준 인터넷 규약)
  • FTP(File Transfer Protocol)는 원격 서버 사이에 파일을 교환하기 위한 TCP/IP 프로토콜이고 HTTP(Hyper Text Transfer Protocol)는 HTML 문서의 송수신을 위해 사용하는 프로토콜
  • HTTP 프로토콜은 비 연결(non connectionless) 지향형 통신 프로토콜
  • 정보를 요청하면 서버는 이전 정보를 기억하지 않고, 새로운 연결을 만든 후 응답
  • 무 상태(stateless) 서버 : 웹 서버는 이전에 전송한 정보 기억하지 못함
  • HTTP 프로토콜의 사용자가 요청에 대한 응답만 함
  • 사용자는 한 페이지에서 다른 페이지로 이동하는 것처럼 보이지만 이는 해당 페이지를 서버에 요청해서 이를 일방적으로 클라이언트가 내려 받게 됨.
  • 서버로 웹 페이지를 요청하면 응답해 주고 또 다시 서버에게 페이지를 요청하면 응답하는 식으로 서버가 일방적으로 페이지를 내려 보내주는 것이지 페이지가 다른 페이지로 연결되는 것이 아님.
  • HTTP 비 연결 지향형 서비스의 단점을 극복하기 위해서 쿠키를 사용
  • 쿠키는 사용자의 정보를 지속적으로 유지하기 위한 방법으로 사용
  • 쿠키는 서버가 아닌 클라이언트 컴퓨터의 하드 디스크에 사용자의 정보를 저장하기 때문에 서버의 동작에 무리를 주지 않으면서 사용자의 정보를 적절하게 사용
  • 클라이언트의 일정 폴더에 정보를 저장하기 때문에 서버의 부하를 줄일 수 있다는 것이 쿠키를 사용함으로써 얻을 수 있는 장점
  • 서버가 쿠키를 클라이언트에 저장해 두면 쿠키에 대한 정보를 필요로 하는 웹 페이지가 웹 서버에 요청될 때 저장해 놓은 쿠키에 대한 정보를 웹 서버에 다시 건네줌
  • 쿠키는 사용자측에 대한 정보를 보관해 두었다가 웹 서버의 요청에 의해 그 정보를 원하는 순간 사용할 수 있게 함.

쿠키 사용

  • response 객체를 사용해서 쿠키 정보를 클라이언트에 저장
  • request 객체를 사용하여 가져옴.
  1. 쿠키 객체를 생성
  2. 쿠키에 속성 값을 설정해 줍니다.
  3. response 객체의 addCookie() 메서드를 호출하여 쿠키를 추가합니다.

Cookie 객체를 생성하여 그안에 키와 값을 넣는다.
Cookie info = new Cookie("testCookie", "I am First Coolie!");


쿠키의 메서드 사용

  • 쿠키의 새로운 값을 설정하는 set으로 시작하는 메서드
  • 쿠키에 설정된 값을 알아내는 목적으로 사용하는 get으로 시작하는 메서드

Setter 메서드

void setComment(String)	쿠키에 대한 설명을 설정합니다.
void setDomain(String)	쿠키에 유효한 도메인을 설정합니다.
void setMaxAge(int)		쿠키의 유효한 기간을 설정합니다.
void setPath(String)	쿠키의 유효한 디렉토리를 설정합니다.
void setSecure(boolean)	쿠키의 보안을 설정합니다.
void setValue(String)	쿠키의 값을 설정합니다.
void setVersion(int)	쿠키의 버전을 설정합니다.

Getter 메서드

String getComment()	쿠키에 대한 설명을 알려줍니다.
String getDomain()	쿠키의 유효한 도메인 정보를 알려줍니다.
int getMaxAge()		쿠키의 사용할 수 있는 기간에 대한 정보를 알려줍니다.
String getName()	쿠키의 이름을 알려줍니다.
String getPath()	쿠키의 유효한 디렉토리 정보를 알려줍니다.
boolean getSecure()	쿠키의 보안이 어떻게 설정되어 있는지를 알려줍니다.
String getValue()	쿠키에 설정된 값을 알려줍니다.
int getVersion()	쿠키의 버전을 알려줍니다.

쿠키 정보 정책

모든 쿠키의 정보를 알아내기

Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies) {
	out.println(cookie.getName() + " : " + cookie.getValue() + "<br>");
}

쿠키를 만료시켜 삭제하는 법

Cookie cookie = new Cookie("id","");
cookie.setMaxAge(0);	// 쿠키의 유효시간을 만료시킴
response.addCookie(cookie);

JSESSIONID

  • 웹 브라우저로 세션 ID를 보낼 때 쿠키 형태로 만들어서 전송하는데, JSESSIONID가 바로 세션 정보를 저장한 쿠키의 이름

쿠키 사용 예제

	// Cookie 생성
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		Date d = new Date();
        
        // 쿠키는 내장객체가 아니므로 객체를 생성해서 사용한다.
        // Encoding 해주기
		Cookie c = new Cookie("cookieTest", URLEncoder.encode("JSP프로그래밍", "UTF-8"));
        
        // 생성하면서 life cycle을 설정해준다. setMaxAge가 0이면 삭제 됨.
		c.setMaxAge(24 * 60 * 60);
        
        // 1년 동안 유효 쿠키
        // c.setMaxAge(365 * 24 * 60 * 60);
        
        // 쿠키 생성
		response.addCookie(c);
		out.println("현재 시간 : " + d);
		out.println("<br> 문자열을 cookie에 저장합니다. ");
	}
    
    // Cookie 읽기
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
        // Cookie는 배열로서 받을 수 있다.
		Cookie[] cookies = request.getCookies();
		
		for (Cookie cookie : cookies) {
			out.println("<h2>쿠키값 가져오기 </h2><br>");
            // Decoding 해주기
			out.println(URLDecoder.decode(cookie.getValue(), "UTF-8"));
		}
	}

0개의 댓글