Java Category/JSP

[JSP] 쿠키(Cookie)

ReBugs 2023. 11. 24.

쿠키

  • 쿠키는 사이트에 접속할 때 생성되는 정보를 담은 4KB 이하 크기의 임시 파일을 의미
  • 네트워크 환경에서 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하기 위해 사용
  • 세션과 다른 점은 로그인 상태 정보를 사용자 컴퓨터인 클라이언트에 저장된다는 부분(세션은 웹 서버에 저장)
  • 쿠키는 불순한 의도로 복사되거나 해킹 등에 의해 개인 정보가 탈취될 수 있다는 보안상 취약한 단점 존재

 

쿠키에 의한 웹 브라우저 구분

  • 쿠키는 클라이언트의 정보를 웹 브라우저에 저장하기 때문에 이후 웹 서버로 서비스를 요청할 경우
  • 쿠키를 읽어 새로운 웹 브라우저인지 아니면 이전에 요청했던 웹 브라우저인지를 구별함
  • 쿠키가 생성되면 웹 브라우저는 쿠키가 삭제되기 전까지 쿠키의 요청이 있을 때마다 웹 서버에게 쿠키를 제공

 

쿠키와 세션

  • 웹 브라우저에서 서버로 접속할 때 쿠키 대신 세션을 사용하는 이유는 쿠키에 비해 세션이 보안에 강하기 때문임
  • 쿠키와 세션의 가장 큰 차이점은 웹 브라우저를 통해 서비스를 요청할 때 사용자의 정보가 저장되는 위치
  • 쿠키는 서버의 자원을 전혀 사용하지 않지만 세션은 서버의 자원을 사용함
  • 웹 서비스에 대한 요청 속도는 세션보다 쿠키가 더 빠르므로 쿠키와 세션의 선택은 주어진 개발 환경에 맞춰 사용하면 됨

 

 

Cookie 클래스

  • 쿠키는 연결 상태가 없는 HTTP 프로토콜을 위해 접속된 상태를 그대로 유지할 때 필요
  • 쿠키는 웹 브라우저에 상태 정보를 저장하기 때문에 이후 웹 서버로 전송되는
    서비스 요청에는 쿠키가 가지고 있는 정보도 함께 포함되어 전송
  • Cookie 클래스는 쿠키 생성 및 관련 정보 등을 설정하기 위해 다양한 쿠키 관련 메소드를 제공

 

쿠키 생성 메소드

  • 쿠키를 생성하려면 Cookie 클래스의 Cookie( ) 메소드를 사용, 쿠키 생성 후
    쿠키를 설정할 때 반드시 response 내장 객체의 addCookie( ) 메소드를 사용
  • Cookie( ) 메소드 : 쿠키 생성(“쿠키이름”, “쿠키값”)
  • addCookie( ) 메소드 : 쿠키 설정(변수명)

 

 

쿠키 정보 메소드

  • getCookie( ) 메소드 : 쿠키 객체 가져오기
  • Cookie[ ] 변수명 : 여러 개의 쿠키 객체 가져오기

  • getName( ) 메소드 : 쿠키 이름 가져오기
  • getValue( ) 메소드 : 쿠키값 가져오기

 

 

쿠키 삭제

  • Cookie 클래스에서는 쿠키를 삭제하기 위한 별도의 기능을 제공하지 않기 때문에 쿠키를 삭제하려면 setMaxAge( ) 메소드를 사용하여 괄호 안에 정수의 값 0을 매개변수로 입력하여 유효시간이 만료됨에 따라 쿠키는 자동으로 삭제되도록 선언해야 함
  • 쿠키의 유효시간은 ‘초’ 단위이며 1시간을 설정하려면 setMaxAge(60 * 60)으로 선언
  • 쿠키의 이름이 userID이고 쿠키의 값이 u_id인 경우 setMaxAge( ) 메소드를
    사용하여 쿠키를 삭제하려면 다음과 같이 선언

 

예제

CookieLoginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<%
	Cookie[] cookies = request.getCookies(); //쿠키들을 저장할 배열, 쿠키 가져오기
	String id = ""; //쿠키 값이 있다면 저장할 아이디 변수
	if(cookies != null) //쿠키가 없지 않다면
	{
		for(int i = 0; i < cookies.length; ++i)
		{
			if(cookies[i].getName().equals("id")) //쿠키의 이름이 id와 같다면
			{
				id = cookies[i].getValue(); //아이디 변수에 해당 쿠키의 키와 대응하는 값을 저장
				break;
			}
		}	
	}
%>
<center>
	<h2> 쿠키 로그인 </h2>
	<form action = "CookieLoginProc.jsp" method = "post">
		<table width = "400" border = "1">
			<tr height = "50">
				<td width="150" align="center"> 아이디 </td>
				<td width="250"> <input type = "text" name = "id" value="<%= id %>"></td>
			</tr>
			<tr height = "50">
				<td width="150" align="center"> 패스워드 </td>
				<td width="250"> <input type = "password" name = "pass"></td>
			</tr>
			<tr height = "50">
				<td align="center" colspan = "2"><input type="checkbox" name = "save" value="1"> 아이디 저장 </td>
			</tr>
			<tr height = "50">
				<td align="center" colspan = "2"><input type="submit" value = "로그인"></td>
			</tr>
		</table>
	</form>
</center>
</body>
</html>

 

CookieLoginProc.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<%
	request.setCharacterEncoding("UTF-8");
	String save = request.getParameter("save"); //아이디 체크박스의 값을 불러옴
	String id = request.getParameter("id");
	
	if(save != null) // 아이디 체크 박스의 값이 null이 아니라면 쿠키 생성
	{
		Cookie cookie = new Cookie("id", id); //쿠키 생성, 생성자는 해시테이블과 같은 방식으로 key-value형식
		cookie.setMaxAge(60 * 10); //쿠키 유효시간 설정 -> 10분
		response.addCookie(cookie); //클라이언트 PC에 쿠키 값을 저장
		out.print("쿠키 생성 완료");
	}
%>
</body>
</html>

 

댓글