c.setMaxAge(-1); 유효 시간을 음수로 지정하여 Session 쿠키를만든다.
package sec02.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SetCookieValue
*/
@WebServlet("/set")
public class SetCookieValue extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Date d = new Date();
Cookie c = new Cookie("cookieTest", URLEncoder.encode("JSP프로그래밍입니다.", "utf-8"));
//c.setMaxAge(24 * 60 * 60);
c.setMaxAge(-1); //세션 쿠키를 생성합니다.
response.addCookie(c);
out.println("현재시간 : " + d);
out.println("<br> 문자열을 Cookie에 저장합니다.");
}
}
<popupTest.html>을 다음과 같이 작성하고 웹 페이지가 브라우저에 로드될 때 pageLoad() 함수를 호출한 후 쿠키에 접근해 팝업창 관련 정보를 가져온다. getCookeValue() 함수를 호출하여 쿠키 이름 notShowPop의 값이 true가 아니면 팝업창을 나타내고, notShowPop의 값이 true이면 팝업창을 나타내지않는다.
<popupTest.html>
<html>
<head>
<meta charset="UTF-8">
<title> 자바스크립트에서 쿠키 사용 </title>
<script type = "text/javascript">
// 페이지 로드 이벤트 처리
window.onload = pageLoad; // 브라우저에 웹 페이지가 로드될 때 PageLoad() 함수를 호출하여 실행한다.
function pageLoad(){
// 저장된 쿠키 읽어오기
notShowPop =getCookieValue(); // notShowPop 쿠키 값을 getCookieValue()를 호출하여 얻는다.
// notShowPop의 값이 true가 아니면 팝업 창을 나타낸다.
if(notShowPop!="true"){
window.open("popUp.html","pop","width=400,height=500,history=no,resizable=no,status=no,scrollbars=yes,menubar=no");
}
}
// 쿠키 읽어오는 함수
function getCookieValue(){
var result="false";
// 쿠키 여부 확인
if(document.cookie != ""){
/* document의 cookie 속성으로 쿠키 정보를 문자열로 가져온 후
세미콜런(;)으로 분리해 각각의 쿠키를 얻는다.*/
cookie = document.cookie.split(";");
for(var i=0; i<cookie.length;i++){
element=cookie[i].split("=");
value=element[0];
// 정규식을 이용해 쿠키 이름 문자열의 공백(\s)을 제거한다.
value=value.replace(/^\s*/,'');
// 쿠키 이름이 notShowPop이면 해당하는 쿠키 값을 가져와 반환한다.
if(value=="notShowPop"){
result= element[1];
}
}
}
return result;
}
// 쿠키 삭제 클릭시 호출한다, notShowPop 쿠키 값을 fals로 설정한다.
function deleteCookie(){
document.cookie = "notShowPop=" + "false" + ";path=/; expires=-1" ;
}
</script>
</head>
<body>
<form>
<!-- 자바 스크립트 함수로 해당 함수를 실행하여 쿠키 값을 삭제한다. -->
<input type=button value="쿠키삭제" onClick="deleteCookie()" >
</form>
</body>
</html>
popUp.html에서는 오늘 더 이상 팝업창 띄우지 않기에 체크하면 자바스크립트 함수인 setPopUpStart() 함수를 호추해 notShowPop의 값을 true로 설정하여 재접속 시 팝업창을 나타내지 않도록 설정한다.
<popUp.html>
<html>
<head>
<meta charset="UTF-8">
<!-- 함수 script -->
<script type="text/javascript">
function setPopUpStart(obj){
if(obj.checked==true){
var expireDate = new Date();
/* 쿠키 유효 시간을 한달로 설정한다. */
expireDate.setMonth(expireDate.getMonth() + 1);
/* 오늘 더 이상 팝업창 띄우지 않기에 체크하면 notShowPop 쿠키 값을 ture로 설정하여 재접속시 팝업창을 나타내지않는다. */
document.cookie ="notShowPop=" +"true" + ";path=/; expires=" +
expireDate.toGMTString();
window.close();
}
}
</script>
</head>
<body>
알림 팝업창입니다.
<br><br><br><br><br><br><br>
<form>
<input type=checkbox onClick="setPopUpStart(this)" >오늘 더 이상 팝업창 띄우지 않기
</form>
</body>
</html/>
popupTest.html을 실행하면 다음과 같이 팝업창이 나온다.
오늘 더 이상 팝업창 띄우지 않기를 클릭하면
더 이상 팝업창이 나오지 않는다.
새로고침을 해도 동일하다
여기서 다음과 같이 쿠키삭제 후 새로고침을 하면 정상적으로 팝업창이 나온다.
'[책] > 자바 웹을 다루는 기술' 카테고리의 다른 글
6. Thumnail을 사용해보자 (0) | 2020.01.14 |
---|---|
5. tiles를 사용해보자 (0) | 2020.01.10 |
4. Filter API (0) | 2020.01.06 |
2. 쿠키란? (0) | 2020.01.06 |
1. server.xml을 이용하여 컨텍스트 등록하기 (0) | 2020.01.06 |