Post

[JSP] 쿠키 사용하기

쿠키

  • 웹 브라우저에 저장되는 작은 크기의 텍스트 데이터
  • <이름, 값> 쌍으로 구성
  • 최초 요청의 처리에서 웹 서버가 쿠키를 만들어 응답 헤더에 포함시킴
  • 웹 브라우저가 쿠키를 저장했다가 같은 서버에 요청을 보낼 때 쿠키를 요청 헤더에 넣어 전송한다.
  • 서버와 클라이언트 간 상태 정보를 공유함으로써 연이은 여러 요청을 관련지어 처리할 수 있음

쿠키의 구성

  • 하나의 쿠키는 하나의 <이름, 값>을 가짐
    • 이름과 값은 알파벳과 숫자로 구성된 문자열
  • 쿠키는 추가 정보를 가질 수 있음
    • 유효 시간: 쿠키의 유효시간
    • 도메인: 쿠키를 만들고 이용할 서버를 지정
    • 경로: 쿠키가 보내질 서버의 경로를 지정
    • 주석: 쿠키의 목적을 설명
    • 이러한 추가 정보는 브라우저에서 기억하고 있음
메서드리턴 타입기능
getName()String쿠키의 이름을 리턴
getValue()String쿠키의 값을 리턴
setValue(String value)void쿠키의 값을 value로 지정
getDomain()String쿠키가 전송될 서버의 도메인을 리턴
setDomain(String pattern)void쿠키가 전송될 서버의 도메인을 지정
getPath()String쿠키의 전송 경로를 리턴
setPath(String uri)String쿠키의 전송 경로를 지정
getMaxAge()String쿠키의 유효시간을 리턴
setMaxAge(int seconds)void쿠키의 유효시간을 초 단위로 지정. 음수로 지정하면 웹 브라우저 종료 시 쿠키 삭제

쿠키의 생성과 전송

  • JSP 페이지에서 Cookie 클래스의 객체를 생성함
    • newCookie(Stringname, Stringvalue)
  • 응답 헤더에 쿠키 하나를 추가함
    • response.addCookie(Cookie)
  • 쿠키를 전송하기 전에 추가 정보를 설정할 수 있음
1
2
3
4
<%
  Cookie cookie = new Cookie("name", "value");
  response.addCookie(cookie);
%>

쿠키 값 읽기

  • request.getCookies() 사용
    • 웹 브라우저로부터 전송된 Cookie 객체들의 배열을 리턴함
1
2
3
4
5
6
<%
	Cookie[] cookies = request.getCookies();
	for(Cookie c: cookies) {
		out.print(c.getName() + ":" + c.getValue() + "<br>");
	}
%>

쿠키의 유효시간

  • 브라우저가 쿠키를 저장하는 기간
  • 쿠키 생성 후 Cookie 클래스의 setMaxAge(int seconds)로 지정
  • 유효시간이 경과된 쿠키는 웹 브라우저에서 자동 삭제됨
  • 유효시간을 0으로 설정하면 기존 쿠키를 삭제함
  • 시간을 설정하지 않거나 음수로 설정하면 웹 브라우저가 종료될 때 쿠키가 삭제됨

쿠키의 삭제

  • JSP에서 쿠키를 삭제하는 메서드는 별도로 제공되지 않는다.
  • setMaxAge(0)로 쿠키의 유효시간을 0으로 변경한 후 응답 헤더에 전송하면 다음 응답 시 쿠키를 삭제한다.
1
2
3
4
5
<%
	Cookie cookie = new Cookie("name", "jimmy");
	cookie.setMaxAge(0);
	response.addCookie(cookie);
%>

쿠키의 도메인

  • 기본적으로 쿠키는 그 쿠키를 생성한 서버에게만 전송될 수 있음
    • ex) ‘http://www.oracle.com/JSP/create_cookie.jsp’에서 생성된 쿠키는 ‘http://www.oracle.com’으로 시작되는 페이지에 접속할 때만 전송됨
  • setDomain(String pattern)로 쿠키에 도메인 설정을 하면 같은 도메인 상에 있는 다른 호스트들과 쿠키를 공유할 수 있음
    • 자신이 속한 도메인 내에서만 도메인 설정이 가능하다.
1
2
3
4
5
<%
	Cookie cookie = new Cookie("name", "jimmy");
	cookie.setDomain("java.oracle.com");
	response.addCookie(cookie);
%>

쿠키의 경로

  • setPath(String uri)를 사용해 쿠키를 보낼 서버 상의 경로를 지정
    • ex) ‘http://localhost:8080/HelloJSP/8-1.jsp’에서 경로는 ‘/HelloJSP’
  • 지정 경로(하위 경로 포함)에 있는 페이지에만 쿠키를 보냄
  • 경로를 지정하지 않으면 쿠키를 만든 페이지가 위치한 경로로 설정됨
1
2
3
4
5
6
7
8
9
10
11
12
<%
  Cookie c1 = newCookie("name","jimmy");
  response.addCookie(c1);

  Cookie c2 = newCookie("phone","010-1111-2222");
  c2.setPath("/HelloJSP");
  response.addCookie(c2);

  Cookie c3 = newCookie("address","Seoul");
  c3.setPath("/HelloJSP/path3");
  response.addCookie(c3);
%>

쿠키를 이용하여 로그인 구현하기

  1. 사용자가 입력한 아이디, 비밀번호를 읽고 가입된 회원인지 판단한다.
  2. 가입된 회원이라면 로그인에 사용될 쿠키를 생성한다.
  3. 이후 페이지를 방문할 때는 클라이언트가 보낸 쿠키로 로그인 여부를 판단한다.
  4. 로그아웃을 하면 사용했던 쿠키를 삭제한다.

로그인 작업

1
2
3
4
5
<form action="8-9.jsp" method="post">
  아이디 <input type="text" name="id" /><br />
  비밀번호 <input type="password" name="pw" /><br />
  <input type="submit" value="확인" />
</form>

로그인 처리

1
2
3
4
5
6
7
8
9
10
11
<%
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	if(id.equals("admin") && pw.equals("pass")) {
		Cookie cookie = new Cookie("ID", "ADMIN");
		response.addCookie(cookie);
		out.print("<h3>로그인 성공</h3>");
	} else {
		out.print("<h3>로그인 실패</h3>");
	}
%>

로그인 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%
	Cookie[] cookies = request.getCookies();
	boolean isLogin = false;
	for(Cookie c: cookies) {
		if(c.getName().equals("ID") && c.getValue().equals("ADMIN")) {
			isLogin = true;
			break;
		}
	}
	if(isLogin) {
		out.print("<h3>로그인한 상태입니다.</h3>");
		out.print("<a href=8-11.jsp>로그아웃</a>");
	} else {
		out.print("<h3>로그인한 상태가 아닙니다.</h3>");
		out.print("<a href=8-8.jsp>로그인</a>");
	}
%>

로그아웃 처리

1
2
3
4
5
6
7
8
9
<%
	Cookie[] cookies = request.getCookies();
	for(Cookie c: cookies) {
		if(c.getName().equals("ID")) {
			c.setMaxAge(0);
			response.addCookie(c);
		}
	}
%>
This post is licensed under CC BY 4.0 by the author.