쿠키(Cookie)

essential·2023년 8월 8일
0

JSP

목록 보기
19/21

쿠키의 개요

  • 쿠키란 클라이언트 측에서 관리되는 정보를 의미
  • 세션은 서버 측에서 관리되지만 쿠키는 클라이언트에 정보 저장
  • 쿠키의 정보는 세션과 달리 브라우저를 종료한다고 해도 생존 기간이
    지정되면 생존 기간 동안 데이터가 사라지지 않는다.
  • 쿠키는 하드디스크에 파일로 저장되기 때문에, 그 파일이 남아있는 한
    항상 유지
  • 쿠키는 클라이언트에서 관리되기 때문에 보안적으로 매우 취약

HTTP 헤더를 이용한 쿠키 설정

  • 쿠키를 설정하는 방법
    • HTTP 헤더를 이용한 쿠키 설정
    • 서블릿 API를 이용한 쿠키 설정
  • HTTP 헤더를 이용한 쿠키 설정

Set-Cookie: name=value; expires=date; domain=domain; path=path; secure

  • 속성의 기능
속성설명
name쿠키 이름을 지정한다.
value쿠키 값을 지정한다.
expires쿠키의 만료 기간을 지정한다.
domain저장된 쿠키를 서버에게 전송할 떄의 도메인을 지정한다.
path쿠키가 전송될 서버의 URL을 지정하고, 유효한 URL 일 경우 쿠키 객체를 전송한다.
secure이 속성을 추가하면 보안적인 채널(SSL 등)로 전송되어야 한다.

서블릿 API를 이용한 쿠키 설정

  • 쿠키 생성
    • Cookie cookie = new Cookie(name, value);
  • 쿠키 클라이언트로 전송
    • response.addCookie(cookie);
  • 쿠키 관련 메소드
메소드설명
setValue(String value)쿠키 값을 설정한다.
setMaxAge(int seconds)쿠키 만료 기간을 지정한다.
getValue()쿠키 값을 얻어 온다.
getMaxAge()쿠키 만료 기간을 얻어 온다.
getName()쿠키 이름을 얻어 온다.

예제

cookieTest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% 	
	Cookie cookie =new Cookie("name", "lee");
	cookie.setMaxAge(600);
	response.addCookie(cookie);
%>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie Test</title>
</head>
<body>
<h2><%=cookie.getName() %></h2>
<h2><%=cookie.getValue() %></h2>
<h2><%=cookie.getMaxAge() %></h2>
<a href="cookieTest2.jsp">쿠키 값 불러오기</a>
</body>
</html>

cookieTest2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String name="";
	String value="";
	String cookie=request.getHeader("Cookie");
	
	if(cookie!=null){
		Cookie cookies[]=request.getCookies();
		
		for(int i=0;i<cookies.length;i++){
			if(cookies[i].getName().equals("name")){
				name=cookies[i].getName();
				value=cookies[i].getValue();
			}
		}
	}
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie Test</title>
</head>
<body>
<h2>쿠키 이름 = <%=name %></h2>
<h2>쿠키 값 = <%=value   %></h2>
</body>
</html>

sessionLogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Login</title>
</head>
<body>
<form action="sessionLogin2.jsp" method="post">
<table border=0 width=400 height=100>
	<tr bgcolor="yellow">
		<td align=right><font size=2>아이디</font></td>
		<td><input type="text" name="id" size=10></td>
	</tr>
	<tr bgcolor="yellow">
		<td align=right><font size=2>비밀번호</font></td>
		<td><input type="password" name="pass" size=12></td>
	</tr>
	<tr bgcolor="yellow">
		<td colspan=2 align=center>
		<input type="submit" value="로그인">
		<input type="reset" value="다시 작성">
		</td>
	</tr>			
</table>
</form>
</body>
</html>

sessionLogin2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%session.setAttribute("id", request.getParameter("id")); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Session Login</title>
</head>
<body>
<center>
<h3>로그인 되었습니다.</h3>
<h3>로그인 아이디 : <%=(String)session.getAttribute("id") %></h3>
<a href="sessionLogout.jsp">로그아웃</a>
</center>
</body>
</html>

sessionLogout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	if (session.getAttribute("id") == null || session.getAttribute("id") == ""){
%>
<script>
location.href="sessionLogin.jsp"
</script>
<%
}
session.removeAttribute("id");
%>
<h3>로그아웃 되었습니다.</h3>
<a href="sessionLogin.jsp">로그인 페이지로 이동</a>
  • 로그인 후 sessionLogout.jsp 로 이동시 location 타지 않고 [로그아웃 되었습니다 로그인 페이지로 이동] 페이지 확인 가능

쿠키를 이용한 사용자 화면 설정 정보 유지

예제

cookieExample.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% 
	String language="korea";
	String cookie = request.getHeader("Cookie");
	
	if(cookie!=null){
		Cookie cookies[]=request.getCookies();
		
		for(int i=0;i<cookies.length;i++){
			if(cookies[i].getName().equals("language")){
				language=cookies[i].getValue();
			}
		}
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%if(language.equals("korea")){%>
		<h3>안녕하세요. 이것은 쿠키 예제입니다.</h3>
	<%}else{ %>
		<h3>Hello. This is Cookie example.</h3>
	<%} %>
	
	<form action="cookieExample2.jsp" method="post">
		<input type="radio" name="language" value="korea"
			<%if(language.equals("korea")){%>checked<%}%>>한국어 페이지 보기
		<input type="radio" name="language" value="english"
			<%if(language.equals("english")){%>checked<%}%>>영어 페이지 보기
		<input type="submit" value="설정">
	</form>		
</body>
</html>

cookieExample2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	Cookie cookie=new Cookie("language",request.getParameter("language"));
	cookie.setMaxAge(60*60*24);
	response.addCookie(cookie);
%>
<script>
location.href="cookieExample.jsp"
</script>

cookieExample.jsp 실행 후 개발자 도구에서 쿠키 확인

  • Value에 korea는 현재 저장된 쿠키 값을 나타내며 영어 페이지 보기 설정 시 english로 변경 됨
profile
essential

1개의 댓글

comment-user-thumbnail
2023년 8월 8일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기