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

+ Recent posts