JSP

[JSP]Cookie

MoZZANG 2022. 5. 3. 14:19
쿠키란?

: 쿠키는 상태정보(text)를 유지하기 위한 기술로 클라이언트에 상태정보를 저장한다.

- 쿠키는 클라이언트의 PC(파일로)나 웹브라우저(파일이 아님)에 저장되는 간단한 텍스트정보를 의미.
- 웹서버는 웹브라우저가 전송한 쿠키를 사용해 필요한 데이터를 읽어올 수 있다.

- 쿠키는 그 크기가 하나에 4KB 이하로 제한이 되어 있으며,  총 300개까지 정보를 저장할 수 있다. 

  따라서, 최대로 저장가능한 쿠키의 용량은 1200KB 즉 1.2MB

 

 

쿠키의 주요 메서드


String getName() : 쿠키의 이름 리턴
String getValue() : 쿠키의 값 리턴
String getPath() : 쿠키의 적용 경로 리턴 - setPath()로 미 설정시 null
int getMaxAge() : 쿠키의 유효시간 리턴- setMaxAge()로 미 설정시 -1 / 유효시간 설정하면 파일로 저장, 설정안하면 웹브라우저에 저장


setValue(String value) : 쿠키의 값 설정 
setDomain(String domain) : 쿠키가 적용되는 도메인 설정. 서브도메인에도 쿠키를 적용하고자 할때에는 ".도메인"을 넣어준다

setMaxAge(int exp) : 쿠키의 유효시간을 초 단위로 설정. 유효시간을 설정하지 않으면 쿠키정보는 웹브라우저 메모리에 저장되고 웹 브라우저를 닫으면  자동으로 삭제된다. 유효시간을 설정하는 경우 쿠키정보는 사용자의 pc에 저장된다.

 

 

 

쿠키 설정 절차 및 동작방식

1) 클라이언트가 처음 서버에 접근하면 서버는 쿠키를 생성하고 http응답 헤더에 쿠키를 실어서 보낸다.
2) 후에 사용자가 그 사이트를 다시 방문하는 경우 웹브라우저는 저장된 쿠키 정보를 서버에 전송한다.
3) 서버는 이 쿠키 정보를 이용해 필요한 작업을 수행한다.

 

 

 

쿠키에 값 저장시(로그인 처리)


1) 쿠키 개체 생성 
javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie(String name, String value)


2) 생성한 쿠키를 response개체를 통해 응답헤더에 추가
response.addCookie(쿠키개체)

 

 

 

쿠키에 저장된 값 읽어 오기(로그인 여부 판단)

- request개체의 getCookies()메서드를 이용해서 읽어온다.

Cookie[] cookies = request.getCookies()

 

 

 

 

쿠키 삭제(로그아웃)

-setMaxAge()메서드의 인자값을 0을 주어서 삭제한다.

Cookie cookie = new Cookie("memID","");
cookie.setMaxAge(0);
response.addCookie(cookie);

 

 

 

 

 

예제를 보면서 알아보자

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>CookieIndex.jsp</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<style>
  /*점보트론 세로폭 줄이기*/
  .jumbotron {
    padding-top: 1rem;
    padding-bottom: 1rem;
  }
</style>
</head>
<body>
	<div class="jumbotron jumbotron-fluid bg-warning">
	    <div class="container-fluid">
	      <h1>Cookie</h1>      
	    </div><!--container-fluid-->
  	</div><!--jumbotron-fluid--> 
  	<div class="container">    
    	<fieldset class="form-group border p-3">
    		<legend class="w-auto p-3">쿠키</legend>
    		<h2>쿠키 설정하기</h2>
    		<%
    		//1]쿠키 객체 생성 :new Cookie("쿠키명","쿠키값");	
    		Cookie cookie = new Cookie("UserID","KOSMO");
    		//2]쿠키가 적용되는 PATH 설정
			cookie.setPath(request.getContextPath());
			//3]쿠키 유효기간 설정-초 단위
			/*
			   유효기간 미 설정시 쿠키는 웹브라우저에 저장됨
			   -웹브라우저 닫을때
			    유효기간 설정시는 사용자의 PC(HDD의 텍스트 파일형태)에 저장됨.
			   -유효기간이 지나면 파일은 자동으로 삭제됨
			*/
			cookie.setMaxAge(30);
			//4]생성된 쿠키를 응답헤더에 설정:addCookie()
			response.addCookie(cookie);
    		%>
    		<h2>쿠키를 생성한 현재 페이지에서 쿠키값 읽기</h2>
    		<%
    			//요청헤더에 보내진 쿠키값 읽기
    			Cookie[] cookies=request.getCookies();
    			if(cookies!=null){
    				for(Cookie cook:cookies){
    					//쿠키명 얻기
    					String name=cook.getName();
    					//쿠키값 얻기
    					String value=cook.getValue();
    					out.println(String.format("%s : %s<br/>",name,value));
    				}
    			}
    		
    		%>
    		<h2> 클릭으로 페이지 이동후 쿠키값 확인</h2>
    		<a href="CookieResult.jsp">쿠키값 확인</a>
    	</fieldset>
  	</div><!-- container -->
</body>
</html>

▲cookie.setMaxAge(30)을 해줌으로써 쿠키의 수명을 30초로 설정해주었다.

 

▲ 위에서는 현재 JSEEIONID가 위와 같지만 30초동안 어떠한 요청도 보내지 않고 다시 새로고침해보면 다른 값이 나올 것이다. 설정한 수명동안 아무요청을 하지 않으면 기존의 쿠키가 파괴된다.

 

▲30초 뒤

'JSP' 카테고리의 다른 글

[JSP]session  (0) 2022.05.03
[JSP]Cookie로 간단한 쇼핑몰 만들기 예제  (0) 2022.05.03
[JSP] 내장객체의 영역  (0) 2022.05.02
[JSP]application 객체  (0) 2022.05.02
[JSP]out 객체  (0) 2022.04.29