Back-end/JSP

JSP) 쿠기(Cookie)의미와 사용하기

luana_eun 2022. 3. 1. 23:08
728x90

쿠키는 클라이언트 측에서 관리되는 정보. 웹 브라우저가 사라져도 사용할 수 있다. 

쿠키의 예시는 로그인할때 "아이디 저장" 기능이다. 

세션은 브라우저를 종료하면 사라지고, 아이디는 클라이언트에게만 필요한 정보이므로 쿠키에 저장한다. 

 

 

세션 vs 쿠기

  세션 쿠키
저장 위치 서버 클라이언트의 하드디스크에 파일 형태로 저장
종료 및 삭제 브라우저를 종료하거나
세션 만료 시간이 다 됐을때
쿠키 만료날짜까지
보안 쿠키보다 안전 보안에 취약

 


쿠키 관련 메소드

쿠키 객체 메서드
setValue(String value)     쿠키 값 설정

setMaxAge(int 초)         쿠키 만료 기간 설정

getValue()                   쿠키 값 가져오기

getMaxAge()               쿠키 만료 기간 가져오기

getName()                  쿠키 이름 가져오기

 

내장 객체의 쿠키 관련 메서드

response.addCookie();    응답객체에 쿠키값 추가해서 보내기

request.getCookies();     요청객체에서 쿠키값 꺼내기

 

 


쿠키 사용 방법

쿠키 사용방법 2가지

     1) HTTP 헤더를 이용

     2) 서블릿 API 이용: 서블릿 쿠키 객체를 만들어서 그 안에 저장한다. 

 

1. 쿠키 객체 생성

Cookie ck = new Cookie("name", "CookieValue");

객체를 생성하면 메모리에는 올라가지만 아직 하드디스크에 저장되진 않았다. 

 

 

2. 생성한 쿠키를 response객체에 저장

   response에 담아 클라이언트에게 전달 완료시에 하드디스크에 저장된다. 

response.addCookie(ck);

 

 

3. 쿠키 삭제

세션은 초기화로 삭제 할 수 있지만 쿠키는 사실상 삭제할 수 없다. 

왜냐하면 쿠키는 서버입장에서 상대방 컴퓨터의 하드디스크에 들어있는것이므로,

삭제하려면 클라이언트의 하드에 들어가야하는데 그건 해킹이다.

쿠키 사용 시간이 만료되길 기다리는 수밖에 없는것이다. 

 

따라서 쿠키 사용시간을 0으로 덮어쓰기 한다. 

쿠키값이 실제로 HDD에서 삭제되는것이 아닌, 브라우저에서 사용을 못하게 하는것이다. 

 

순서: 기존 쿠키값 불러오기 > 삭제할 쿠키 찾기 -> 사용시간을 0으로 초기화

// 기존에 저장한 쿠키값 모두 가져오기
Cookie[] cookies = request.getCookies();

// 삭제하고자하는 쿠키값 찾기
if( cookies != null) {
  for(int i=0; i<cookies.length; i++) {
    if(cookies[i].getName().equals("name")) {
      //삭제하려는 쿠키값이 있을때 쿠키 사용시간을 초기화(0)
      cookies[i].setMaxAge(0);
      //응답정보에 담아 보냄.
      response.addCookie(cookies[0]);
    };
  }
}

쿠키를 생성할때도 response를 보내야 실제 저장되듯이,

삭제도 response에 담아 보내야 실제로 0으로 초기화된다. 

 

 


 

쿠키 사용 예제

form태그로 입력받은 값을 쿠키에 저장하기

 

formPage.jsp

<form action="setCookiePage.jsp" method="get">
  <input type="radio" name="color" value="red"> 빨간색
  <input type="radio" name="color" value="blue"> 파란색
		
  <input type="submit" value="전송">
</form>

 

setCookiePage.jsp

// Form 페이지에서 받은 값 가져와 쿠키 만들기	
Cookie cookie = new Cookie("color", request.getParameter("color"));

// 쿠키값 설정
cookie.setMaxAge(60*60);	// 1시간

// 응답정보를 사용해서 쿠키정보 전달
response.addCookie(cookie);

 

728x90