▸JSP & Servlet/기본 문법

쿠키(Cookie)

코데방 2020. 2. 18.
728x90

[ 쿠키(Cookie) ]

  • HTTP 프로토콜에서 클라이언트-서버 간의 관계를 유지하기 위한 수단
  • 서버에 정보를 저장하는 세션(Session)과 달리 클라이이언트측에 정보를 저장함
  • 세션과 달리 브라우저가 종료되더라도 유효기간이 만료하기 전까지 데이터가 유지
  • 하나의 쿠키 정보는 4kb까지 저장 가능하고 브라우저에 따라 갯수의 상한선이 존재

세션(session)에 관한 설명은 아래 링크글을 참조하시면 됩니다.

 

JSP 내장 객체_session (쿠키와 세션) [4/4]

 

 

세션 글에서 차이점을 설명했듯이 클라이언트측(브라우저)에 정보를 저장해두고 서버에서 해당 값을 수정/변경/삭제 할 수 있는 기능을 가진 객체를 Cookie라고 합니다. 하나당 4kb짜리 텍스트 정보입니다. 보안에 취약하기 때문에 민감 정보와 관련 없는 정보들에 대해 주로 사용합니다.

 

세션 객체는 브라우저가 종료되면 다시 사용할 수 없지만 쿠키는 브라우저 종료에 상관없이 유효 시간 내에 데이터를 유지할 수 있습니다. 물론 클라이언트가 쿠키 삭제를 직접 하면 다 사라집니다. 예를 들어 자동 로그인 기능의 경우 세션 방식으로는 브라우저를 껐다 킨 요청에 대해 처리할 수 없기 때문에 쿠키에 자동 로그인에 대한 정보를 적절히 섞어서 사용합니다. 쿠기의 유효 시간이 30일이라면 30일동안 자동로그인을 할 수 있으며, 로그인을 했을 때 유효 시간을 초기화해주거나 아니면 무조건 최초 등록 이후 30일이 지나면 자동 로그인이 풀리게 할 수도 있습니다.

 

쿠키는 브라우저에 저장되기 때문에 서로 다른 브라우저는 다른 쿠키를 가지고 있고 서로 정보를 교환할 수 없습니다. 크롬에서 자동로그인 체크를 해도 익스플로러에서는 적용되지 않는 것이 이 때문입니다.

 

 

 




[ 쿠키(Cookie) 객체의 생성 ]

  • javax.servlet.http.Cookie

Cookie는 이름과 값을 가진 조그만 객체입니다. 쿠키 객체를 생성할 때 생성자로 지정해주면 됩니다.

Cookie cookie = new Cookie("name", "value");

 

 


 

[ 쿠키(Cookie) 객체의 변경(set)과 정보 얻기(get) ]

 

기존에 존재하던 쿠키 객체의 값을 수정하거나 쿠키를 더 이상 사용할 수 없게 설정합니다. 수정하거나 무효화하고 난 뒤 꼭 response 객체에 다시 add해줘야 브라우저에게 전달돼 적용됩니다.

 

쿠키 객체 수정과 무효화 메소드 설명
void setMaxAge(int expiry) 쿠키의 유효 시간 설정 (0으로 할 경우 무효화)
int getMaxAge() 쿠키의 유효 시간 반환
void setPath(String uri) 쿠키 사용의 유효 디렉토리 설정
String getPath() 설정된 유효 디렉토리 반환
void setValue(String newValue) 쿠키의 값을 수정
String Cookie.getName() 쿠키의 이름 반환
void setVersion(int v) 쿠키의 버전 정보 설정
int getVersion() 쿠키의 버전 정보 반환
void setComment(String purpose) 쿠키에 코멘트 설정
String getComment() 쿠키의 코멘트 반환

 

 


 

 

[ 브라우저로부터 쿠키(Cookie) 정보 가져오기 ]

 

사용자 요청이 담긴 request 객체에서 모든 쿠키 정보를 가져올 수 있습니다.

 

request 객체의 쿠키 관련 메소드 설명
Cookie[] getCookies() 사용자 브라우저가 가진 모든 쿠키 객체를 배열로 반환
	<%
		Cookie[] cookie = request.getCookies();
		for(int i = 0; i < cookie.length; i++) {
			out.println(cookie[i].getValue() + "<br/>");
		}
	%>

 

 


 

 

[ 내부에서 쿠키(Cookie) 객체의 전달 ]

 

클라이언트 요청 시 가져온 쿠키 정보는 request 객체의 getCookies() 메소드로 가져올 수 있기 때문에 JSP/서블릿에서는 어디서든 얻어올 수 있고, 일반 클래스의 경우는 request 객체를 전달 받아 가져올 수 있습니다.

 

새로 만들거나 수정한 쿠키 객체는 JSP/서블릿끼리 쿠키 객체를 전달할 때, 어떤 방식으로 전달해도 상관 없습니다. JSP 내장 객체편에서 다뤘듯이 여러 객체들에 Attribute로 추가해 전달하거나, 생성자로 전달하거나, 메소드의 매개변수로 전달해도 무방합니다. 일반 객체를 다루듯이 다루면 됩니다.

 

		Cookie cookie = new Cookie("name", "value");
		request.setAttribute("cookie", cookie);
		Test test = new Test(request);

 

 


 

 

[ 클라이언트에게 쿠키(Cookie) 전달 ]

 

클라이언트에게 최종 응답해주는 객체인 response에는 쿠키를 add할 수 있는 메소드가 준비되어 있습니다. 생성한 쿠키를 모두 response 객체에 담아주면 최종 회신할 때 쿠키 객체가 브라우저로 전달돼서 저장됩니다.

 

주의할 점은 생성할 때 뿐만 아니라 기존 쿠키의 값을 변경하거나, 유효시간은 0으로 설정해 쿠키를 만료 시키고나서도 꼭 response 객체에 다시 담아줘야 한다는 것입니다. 예를 들어 setMaxAge(0) 메소드로 해당 쿠키를 무효화하더라도 response에 add해주지 않으면 클라이언트에게 전달되지 않습니다. 이 경우 클라이언트의 쿠키는 계속 유효하게 작동하게 됩니다.

 

response 객체의 쿠키 관련 메소드 설명
void addCookie(Cookie cookie) response 객체에 쿠키를 첨부함
	<%
		// 생성하고 담아줌
		Cookie idCookie = new Cookie("id", "codevang");
		Cookie nameCookie = new Cookie("name", "servlet");
		response.addCookie(idCookie);
		response.addCookie(nameCookie);
		
		// 수정해도 다시 담아줘야 함
		idCookie.setMaxAge(0);		// 무효화
		nameCookie.setValue("JSP");	// 값 주정
		response.addCookie(idCookie);
		response.addCookie(nameCookie);
	%>
728x90

댓글

💲 추천 글