객체화 없이 사용할 수 있는 객체이며, jsp 파일이 서블릿으로 변환될 때 웹 컨테이너가 자동으로 메모리에 할당해서 제공한다.
웹 브라우저가 보관하고 있는 데이터로, 웹 서버에 요청을 보낼 때 쿠키를 헤더에 담아서 전송한다.
쿠키 생성
쿠키 저장 : 사용자 컴퓨터에 저장해야 하므로 응답을 통해서 생성한 쿠키를 보내줘야 한다.
쿠키 사용 : 사용자가 요청할 때 함께 보내주는 헤더에서 쿠키를 꺼내 사용한다
쿠키 삭제 : 쿠키의 유효기간을 설정해주는 방식으로 삭제할 수 있다.
쿠키를 수정하거나 삭제시 설정된 쿠키객체를 다시 response를 통해 사용자 컴퓨터에 추가해줘야 한다. 쿠키는 사용자의 컴퓨터에 저장되는 것이므로 서버에서 수정된 쿠키를 사용자의 컴퓨터의 쿠키에 덮어씌우기 위함.
쿠키사용 장단점
<!-- setCookie.jsp -->
<!-- ..생략.. -->
<body>
<%
Cookie cookie = new Cookie("key1","value1");
Cookie cookie2 = new Cookie("key2", "value2");
response.addCookie(cookie);
response.addCookie(cookie2)
%>
<a herf="getCookie.jsp">쿠키 확인하기</a>
</body>
<!-- getCookie.jsp -->
<!-- ..생략.. -->
<body>
<%
String check = request.getHeader("Cookie");
if(check != null){
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
out.println(cookie.getName()+" : ");
out.println(cookie.getValue()+"<br>");
// key1 쿠키 수정
if(cookie.getName().equals("key1")){
cookie.setValue("value99");
// response.addCookie를 이용해 사용자 컴퓨터에 덮어쓰기 한다.
response.addCookie(cookie);
}
}
}
%>
<a href="checkUpdateCookie.jsp">수정된 쿠키 확인하기</a>
</body>
<!-- checkUpdateCookie.jsp -->
<!-- 생략 -->
<body>
<%
String check = request.getHeader("Cookie");
if(check != null){
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
out.println(cookie.getName()+" : ");
out.println(cookie.getValue()+"<br>");
// key2 쿠키 삭제
if(cookie.getName().equals("key2")){
// 쿠키 0초 유지 (삭제)
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
%>
<a href="getCookie.jsp">쿠키 삭제 확인하기</a>
</body>
위의 코드의 흐름을 보자.
setCookie.jsp 에서 key1 쿠키와 key2 쿠키를 생성한다. 버튼 누르면 getCookie.jsp로 이동
getCookie.jsp 에서 for문을 이용해 받아온 쿠키배열을 출력한다.
[(JSESSIONID, ..생략..), (key1, value1), (key2, value2)]
그리고 key1 쿠키의 value 값을 "vlaue99" 로 수정한다. 버튼 누르면 checkUpdateCookie.jsp로 이동
checkUpdateCookie.jsp 에서 for문을 이용해 받아온 쿠키 배열을 출력한다.
[(JSESSIONID, ..생략..), (key1, value99), (key2, value2)]
그리고 key2 쿠키를 삭제한다. 버튼 누르면 다시 getCookie.jsp로 이동
getCookie.jsp 에서 for문을 이용해 받아온 쿠키 배열을 출력한다.
[(JSESSIONID, ..생략..), (key1, value99)]
이 때 JSESSIONID 쿠키는 톰캣 서버에서 상태저장을 위해 생성하는 쿠키로, 신경쓰지 말자.
내장객체로서 브라우저마다 한개씩 존재하고, 고유한 SessionID 생성 후 정보를 추출한다.