쿠키(cookie)

MIN·2023년 12월 26일
0

Servlet/JSP

목록 보기
19/21
post-thumbnail

🍪 쿠키(cookie)란?

  • 서버에서 특정 값을 문자열로 생성하여 클라이언트에 보관하는 형식의 데이터
  • 문자열 형태로 저장해두면, 다음번 방문 시 서버가 값을 회수하여 활용할 수 있다
  • 쿠키는 일정시간이 지나가면 자동으로 소멸된다
  • 쿠키는 클라이언트(브라우저)가 저장하기 때문에, 브라우저마다 다른 내용을 저장한다

🍪 쿠키 사용해보기

<!--ex01.jsp-->
<form action="ex01-action.jsp">
	<input type="text" name="memo" placeholder="메모">
	<input type="submit" value="쿠키 만들기">
</form>
<%
//ex01-action.jsp
String memo = request.getParameter("memo");

// ★ new Cookie(쿠키이름, 쿠키값)
Cookie cookie = new Cookie("memo", memo);
	
// ★ 쿠키의 유효시간을 설정한다. 60초, 60분, 24시간, 7일
// 만료된 시간이 모두 지나면 쿠키는 소멸한다
cookie.setMaxAge(60 * 60 * 24 * 7);
	
// ★ 서버에서 생성한 쿠키 객체를 클라이언트에게 보내기 위해서 응답에 추가한다
response.addCookie(cookie);
	
// 쿠키는 클라이언트에 저장되므로, 포워드 및 리다이렉트에 의한 차이가 없다
// 오히려 "재방문"시에 쿠키가 적용되기 때문에 리다이렉트를 지정해야 한다
response.sendRedirect("ex01.jsp");
%>

위 코드에서 별(★)표시한 내용이 쿠키생성에 가장 핵심적인 코드이다!

<%
// 다시 ex01.jsp로 돌아와서 코드 적기!
// 클라이언트가 서버에 방문시 가지고 있던 쿠키를 요청에 담아서 보낸다
// 첫번째 방문이라면 cookies 배열의 값은 null일 수도 있다
Cookie[] cookies = request.getCookies();

//  쿠키의 값은 항상 문자열 형태이다. 쿠키의 값을 저장할 변수를 미리 만들어둔다
String value = "";

// cookies가 null이면 cookies.length에서 NullPointerException이 발생할 수도 있다
for(int i=0; cookies != null && i<cookies.length; i++) {
	Cookie c = cookies[i];
	if(c.getName().equals("memo")) {	// 내가 저장한 쿠키의 이름 memo와 일치하는 쿠키를 찾는다
		value = c.getValue();
		break;
	}
}
out.print("<p>쿠키의 값 : " + value + "</p>");
%>

ex01.jsp를 실행한 후 메모를 입력하면
해당 내용이 쿠키로 저장되어 아래에 나타나게 된다.

스크립틀릿이 아닌 EL Tag도 똑같이 사용 가능하다

<p>쿠키의 값 : ${cookie.memo.value }</p>


🍪 띄어쓰기 쿠키에 저장하기

쿠키는 문자열 형태를 저장할 수 있는데 띄어쓰기 및 특수문자를 넣게되면 에러가 뜬다.
만약 띄어쓰기나 특수문자를 포함하고 싶다면 URLEncoding을 수행하여 저장해야 한다.


<%@ page import="java.net.URLEncoder, java.net.URLDecoder" %>
<% 
// ex01-action.jsp
Cookie cookie = new Cookie("memo", URLEncoder.encode(memo, "UTF-8")); 
%>
<%@ page import="java.net.URLDecoder" %>
<%
// ex01.jsp
out.print("<p>쿠키의 값 : " + URLDecoder.decode(value, "UTF-8") + "</p>");
%>

( 쿠키 사용해보기에 있는 코드에서 위 내용으로 바꿔주면 된다!)





🔥 한줄평
쿠키는 서버에서 생성!
생성된 쿠키를 response에 실어 클라이언트에게 보낸 후 저장
클라이언트가 재방문시 저장된 쿠키를 request에 쿠키를 실어서 서버에 보낸다!

profile
기초부터 시작하는 감쟈 ※ 소개글 확인해주세요!! ※

0개의 댓글