주니어 기초 코딩공부/JSP 기초

[JSP] 쿠키 만들기🍪🍪 쿠키 삭제하기, 쿠키 유효시간 정하기

jju_developer 2023. 1. 23. 19:24
728x90

안녕하세요~! 쿠키굽고온 jju_developer입니다 🍪🍪🍩🎂

 

오늘은 면접에서도 자주 물어보는 쿠키에 대해서 설명드리겠습니다.

 

🍪쿠키란~?

웹 브라우저가 활동하면서 남기는 사용자의 자취들이 마치 먹다 떨어뜨린 과자부스러기(Cookie Crumbles)와 유사한 점에서 비롯한 것이라고 합니다.

 

🍪'쿠키(cookie)'는 웹 브라우저가 보관하는 데이터입니다.

웹 브라우저는 웹 서버에 요청을 보낼 때 쿠키를 함께 전송하며,

웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를 읽을 수 있다.

 

브라우저에 저장: 쿠키

 

브라우저에 쿠키 저장소가 있습니다.

예를 들어 브라우저 검색창에 jju's day 사이트로 검색합니다.

해당 사이트는 웹서버의 정보들이 쿠키로 만들어져 쿠키 저장소로 갑니다.

그럼 그 쿠키(jju's day 사이트)는 쿠키 저장소에 저장이 됩니다.

그럼 다음번에 사용자가 브라우저에 다시 jju's day 사이트를 요청할 때 쿠키저장소를 먼저 검색하여

전달을 하게 됩니다.

 

쿠키의 구성요소 설명
1 이름 각각의 쿠키를 구별하는 데 사용되는 이름  
2 쿠키의 이름과 관련된 값  
3 유효시간 쿠키의 유지 시간  
4 도메인 쿠키를 전송할 도메인 사이트 주소
5 경로 쿠키를 전송할 요청 경로 몇번째 페이지
어떤 페이지 기준으로 저장할 것인가?

🍪쿠키 생성하기

<%
Cookie cookie = new Cookie("cookieName", "cookieValue");
response.addCookie(cookie);
%>

브라우저가 localhost로 들어와 쿠키를 넣는 기능을 작동시킵니다.

http://localhost:8080/chap09/makeCookie.jsp 에 들어올 때에는 제가 아래에 코딩한 코드를

response로 addCookie하여 쿠키를 집어넣습니다. 그러면 이 쿠키(name)는 쿠키 저장소에 저장됩니다.

 

예시

//해당 쿠드 부가 설명
<%Cookie cookie = new Cookie("name", URLEncoder.encode("쮸", "utf-8"));
response.addCookie(cookie);%>

여기서 쿠키의 객체를 만들때 name에 이름을 만들 거고 쮸 라는 이름을 utf-8으로 인코딩을 해서 
쿠키로 저장한 것입니다.

코드 실행값 = utf8러 인코딩 모습입니다.

우리가 방금 만든 name의 쿠키 값이 확인이 가능합니다.

내 브라우져의 저장소에 로컬호스트에는 name과 JESSIONID 가 저장되어 있습니다.


쿠키 값 읽어오기

Cookie[] cookies = request.getCookies();

이번에는 반대로 쿠키의 값을 읽어올 때에는

localhost가 http://localhost:8080/chap09/viewCookies.jsp로 접속을 하면

viewCookies는 request 객체로 쿠키를 돌면서 찾습니다. getCookies를 해서 읽어옵니다!

이때 쿠키는 방금 저장한 name이 있겠죠?

 

해당 코드의 예제를 봅시다.

<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page import = "java.net.URLDecoder" %>
<html>
<head><title>쿠키 목록</title></head>
<body>
쿠키 목록<br>
<%
	Cookie[] cookies = request.getCookies();
	if (cookies != null && cookies.length > 0) {
		for (int i = 0 ; i < cookies.length ; i++) {
%>
	<%= cookies[i].getName() %> = 
	<%= URLDecoder.decode(cookies[i].getValue(), "utf-8") %><br>
<%
		}
	} else {
%>
쿠키가 존재하지 않습니다.
<%
	}
%>
</body>
</html>

위 코드를 실행하게 되면 브라우저가 request 객체로 쿠키 저장소에 쿠키가 있는지를 확인하여 

쿠키들이 들어있는 값을 배열로 반환합니다.

첫 번째 쿠키의 아이디를 구하고 그 값을 디코딩을 합니다.


쿠키 값 변경 및 쿠키 삭제하기

// 변경
<%
Cookie cookie = new Cookie("name", URLEncoder.encode("새로운값","utf-8"));
response.addCookie(cookie);
%>
// 삭제
<%
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(0);
response.addCookie(cookie);
%>

삭제할 때 setMaxAge를 0으로 세팅하면 쿠키가 사라집니다.

초단위기 때문에 만약 여기서 60을 넣으면 쿠키가 60초 뒤에 쿠키가 삭제됨을 뜻합니다~!

 

이제 예제를 볼까요?

//쿠키값 변경~~~~~~~~~
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page import = "java.net.URLEncoder" %>
<%
	Cookie[] cookies = request.getCookies();
	if (cookies != null && cookies.length > 0) {
		for (int i = 0 ; i < cookies.length ; i++) {
			if (cookies[i].getName().equals("name")) {
				Cookie cookie = new Cookie("name",
					URLEncoder.encode("JSP프로그래밍", "utf-8"));
				response.addCookie(cookie);
			}
		}
	}
%>
<html>
<head><title>값 변경</title></head>
<body>
name 쿠키의 값을 변경합니다.
</body>
</html>

modifyCookie.jsp
viewCookies.jsp


//쿠키삭제~~~~~~~~~
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page import = "java.net.URLEncoder" %>
<%
	Cookie[] cookies = request.getCookies();
	if (cookies != null && cookies.length > 0) {
		for (int i = 0 ; i < cookies.length ; i++) {
			if (cookies[i].getName().equals("name")) {
				Cookie cookie = new Cookie("name", "");
				cookie.setMaxAge(0);
				response.addCookie(cookie);
			}
		}
	}
%>
<html>
<head><title>쿠키 삭제</title></head>
<body>
name 쿠키를 삭제합니다.
</body>
</html>

deleteCookie.jsp
viewCookies.jsp


 

쿠키 처리를 위한 유틸리티 클래스

오라클이 적용하는 클래스가 아니라, 누군가 만든 쿠키 클래스입니다.

쿠키는 쿠키를 만들 때 좀 더 쉽게 만들기 위해 정한 클래스입니다.

 

package util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Cookie;
import java.util.Map;
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.io.IOException;

public class Cookies {

	private Map<String, Cookie> cookieMap = new java.util.HashMap<String, Cookie>();

	public Cookies(HttpServletRequest request) {
		Cookie[] cookies = request.getCookies();
		if (cookies != null) {
			for (int i = 0; i < cookies.length; i++) {
				cookieMap.put(cookies[i].getName(), cookies[i]);
			}
		}
	}

	public Cookie getCookie(String name) {
		return cookieMap.get(name);
	}

	public String getValue(String name) throws IOException {
		Cookie cookie = cookieMap.get(name);
		if (cookie == null) {
			return null;
		}
		return URLDecoder.decode(cookie.getValue(), "utf-8");
	}

	public boolean exists(String name) {
		return cookieMap.get(name) != null;
	}

	public static Cookie createCookie(String name, String value) throws IOException {
		return new Cookie(name, URLEncoder.encode(value, "utf-8"));
	}

	public static Cookie createCookie(String name, String value, String path, int maxAge) throws IOException {
		Cookie cookie = new Cookie(name, URLEncoder.encode(value, "utf-8"));
		cookie.setPath(path);
		cookie.setMaxAge(maxAge);
		return cookie;
	}

	public static Cookie createCookie(String name, String value, String domain, String path, int maxAge)
			throws IOException {
		Cookie cookie = new Cookie(name, URLEncoder.encode(value, "utf-8"));
		cookie.setDomain(domain);
		cookie.setPath(path);
		cookie.setMaxAge(maxAge);
		return cookie;
	}

}

 

1. request 객체에 쿠키들을 얻어서 키에 쿠키의 이름을 널고 value에는 쿠키 값을 넣습니다.

2. getValue로 이름을 넣으면 그 추기에 대한 값을 utf-8로 디코딩하여 값을 가져옵니다.

3. exists메서드로 쿠키가 있는지 없는지를 확인합니다.

4. createCookie를 overloading을 하여 매개변수를 다르게 만들어 쿠키를 만듭니다.

 

이렇게 유틸리티 클래스를 이용하여 쿠키를 쉽게 만드는 클래스를 보았습니다.

 

이제 정해진 클래스를 활용해 볼까요?

쿠키클래스

아까 정해진 쿠키 클래스의 주요 내용은 위와 같습니다.

이제 jsp 파일을 열어서 쿠키클래스를 이용해서 쿠키를 만들어 보겠습니다.

 

<%
response.addCookie(Cookies.createCookie("name", "근쥬"));
response.addCookie(Cookies.createCookie("id", "jju", "/chap09", -1));
%>

 

이렇게 쿠키를 지정하면 첫 번째는 key와 value 값을 이름: 근쥬로 지정하였고,

두 번째 쿠키는 유효기간이 없는 쿠키를  생성하였습니다~!

 

실행하면 쿠키 생성 완료~

 

veiw 쿠키. jsp를 사용하여 쿠키 목록을 확인하였습니다.


쿠키를 이용한 로그인 세션 및 history를 통해 페이지 되돌아가기

로그인 체크에 쿠기를 들고 갑니다.

그때 Cookies cookies = new Cookies(request);로 쿠키를 얻어옴

 

1. loginForm.jsp 로그인 폼 만들기

 

2. login.jsp 로그인하고 성공여부 판단

 

3. loginCheck.jsp 로그인이 되어있는지 쿠키를 통해 확인

 

 

4. logout.jsp 쿠키에 로그인의 정보가 있으면 로그아웃시킴!

 

 

그럼 지금까지 jsp를 통한 쿠키에 대해서 알아보았습니다.

 

쿠키 쿠키 거리니까 진짜 쿠키를 많이 먹어버렸습니다...

여러분도 과식 조심하시고 새해복 많이받으세요~🥂

 

오늘도 수고 많으셨습니다~!!

728x90