개발자꿈나무
쿠키 본문
- 쿠키란 ? : 클라이언트의 상태 정보를 유지하기 위한 기술
- 상태 정보를 클라이언트에 키와 값 형태로 저장했다가 다음 요청시 저장된 쿠키를 함께 전송
- 웹 서버는 브라우저가 전송한 쿠키로부터 필요한 데이터 읽어들임
- 쿠키 표준 : 3000개까지 만들 수 있음, 하나의 최대 크기는 4096비트, 하나의 호스트에서 최대 50개 만들 수 있음, 대략 1.2MB 저장
- 동작 메커니즘
- 클라이언트가 서버에 요청(처음 방문)
- 서버가 클라이언트에 응답(쿠키 전송)
- 클라이언트는 쿠키를 받아 저장(서버는 아직 쿠키 사용할 수 없음)
- 클라이언트가 서버에 요청(재방문, 쿠키를 함께 전송)
- 서버는 쿠키를 읽어 작업 수행
- 속성과 API
- 쿠키를 구성하는 속성 : 이름(name), 값(value), 도메인(domain), 경로(path), 유지 기간(max age)
- 쿠키 이름은 생성자를 통해 설정 : new Cookie(String name, String value)
- 생성자를 통해 이름을 설정한 후에는 이름을 변경할 수 없음! 따라서 setName 메소드는 존재하지 않음
- 설정 메소드 : void setValue / void setDomain / void setPath / void setMaxAge
- 쿠키 정보를 읽는 메소드 : String getName / String getValue / String getDomain / String getPath / int getMaxAge
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키</title>
</head>
<body>
<h2>1. 쿠키 설정</h2>
<%
Cookie cookie = new Cookie("mycookie","JMT"); //쿠키 생성
cookie.setPath(request.getContextPath());
cookie.setMaxAge(3600); //쿠키의 유지 기간 1시간 설정
response.addCookie(cookie); //응답헤더에 쿠키 추가
%>
<h2>2. 쿠키 설정 직후 쿠키 값 확인</h2>
<%
Cookie[] cookies = request.getCookies(); //요청헤더에 모든 쿠키 얻어오기
if(cookies != null) {
for(Cookie c:cookies) {
String cookieName = c.getName();
String cookieValue = c.getValue();
out.println(String.format("%s : %s<br/>",cookieName,cookieValue));
}
}
%>
<h2>3. 페이지 이동 후 쿠키값 확인</h2>
<a href="CookieResult.jsp">페이지 이동 후 쿠키값 확인</a>
</body>
</html>
- 쿠키를 이용해 팝업창을 띄울지 안띄울지도 체크 가능!
1. 레이어 팝업창을 띄울지 여부를 체크하고, 쿠키 정보를 넣어준다.
<%
String popupMode = "on"; //레이어 팝업창을 띄울지 여부 체크
//쿠키정보 넣어줄 공간
Cookie[] cookies = request.getCookies();
if(cookies!=null) {
for(Cookie c:cookies) {
String cookieName = c.getName();
String cookieValue = c.getValue();
if(cookieName.equals("PopupClose")) {
popupMode = cookieValue; //popupMode의 값 cookieValue로 갱신
}
}
}
%>
2. 팝업모드가 "on"일 경우에는 팝업을 띄워주도록 팝업 정의
<%
for(int i=1;i<=10;i++) {
out.print("현재 팝업창은"+popupMode+"상태입니다.<br/>");
}
if(popupMode.equals("on")) {
%>
<div id="popup">
<h2 align="center">공지사항 팝업입니다.</h2>
<div align="right"><form name="popFrm">
<input type="checkbox" id="inactiveToday" value="1" />
하루 동안 열지 않음
<input type="button" value="닫기" id="closeBtn" />
</form></div>
</div>
<%} %>
3. 자바 스크립트를 이용해서 닫기버튼을 누르면 팝업창을 숨기도록 표시
<script>
$(function() {
$('#closeBtn').click(function() { <!-- 닫기 버튼(id=closeBtn)을 누르면 팝업창(id=popup) 숨김처리 -->
$('#popup').hide();
});
});
</script>
4. 제이쿼리 함수를 이용해서 비동기 함수를 구성. 서버와 동기되지 않고 요청 처리하겠다는 뜻!
<script>
$(function() {
$('#closeBtn').click(function() { <!-- 닫기 버튼(id=closeBtn)을 누르면 팝업창(id=popup) 숨김처리 -->
$('#popup').hide();
var chkVal = $("input:checkbox[id=inactiveToday]:checked").val(); //input type=checkbox중 id=inactiveToday라는 아이가 checked되어있는지 체크해서 값을 chkVal에 저장해라
$.ajax({ <!-- 아이작스. 비동기함수, 제이쿼리 함수 -->
url : './PopupCookie.jsp', <!-- 요청을 보낼 jsp, 데이터로 보낼 값, 응답받을 데이터 타입 -->
type : 'get',
data : {inactiveToday:chkVal},
dataType : "text",
success : function(resData){ <!-- 요청성공하면 reload해줘(콜백 함수) -->
if(resData != '') location.reload();
}
});
});
});
</script>
5. PopupCookie.jsp를 구성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String chkVal = request.getParameter("inactiveToday");
if(chkVal != null && chkVal.equals("1")) {
//1.쿠키생성
Cookie cookie1 = new Cookie("PopupClose","off"); //쿠키정보에서 비교하기로 한 이름과 같에 만들어줘야 비교할 수 있음
//2.경로설정 컨텍스트 루트
cookie1.setPath(request.getContextPath());
//3.쿠키 유지기간 설정
cookie1.setMaxAge(60*60*24); //하루동안 열지않기
//4.응답객체에 쿠키 추가
response.addCookie(cookie1);
out.print("쿠키:하루동안 열지 않음");
}
%>
728x90
'자바 > JSP&Servlet' 카테고리의 다른 글
액션 태그 (0) | 2023.02.23 |
---|---|
JSP 데이터 베이스 활용 메소드 (0) | 2023.02.22 |