쿠키란?
: 쿠키는 상태정보(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 |