본문 바로가기

JSP/JSP Programming

[JSP] 쿠키를 이용한 마지막 방문일을 표시하는 프로그램

반응형

 쿠키는 일반적으로 다음과 같은 흐름 구조를 갖는다. 클라이언트가 서버로의 첫 번째 요청인지 아닌지에 따라 처리 방식이 다르므로 이를 주의 깊게 살펴보도록 하자.



 일단 서버에서 특정 쿠키에 대한 정보가 있는지 살펴본후에 없으면 ① 클라이언트에서 서버로의 첫 번째 요청이면 ② 서버에서 쿠키를 생성해서 ③ response 객체에 쿠키를 추가한다. ④ 서버가 클라이언트로 응답하면 추가된 쿠키의 정보가 전송된다. ⑤ 이렇게 response객체에 의해서 실려온 쿠키의 정보가 클라이언트 컴퓨터의 하드디스크에 파일 형태로 저장된다.


 첫 번째 방문이 아니면 클라이언트가 서버에 접속할 때에는 쿠키에 저장된 방문자의 정보를 가져와 활용할 수 있다.

 웹 사이트 중에서 클라이언트가 방문하게 되면 마지막을 방문한 날짜가 언제인지 알려주는 사이트가 있다. 마지막 방문일을 저장하고 있는 쿠키를 만들어 보도록 한다. 직접 프로그램을 코딩하기 전에 프로그램을 작성하기 위한 전체적인 흐름을 살펴보도록 한다.




 클라이언트마다 마지막 방문을 표시하는 웹페이지에 방문한 적이 있는지 없는지를 체크하여 서로 다른 처리를 해야 한다. 전에 방문한 적이 없는 클라이언트에 대해서는 서버에서 쿠키 객체를 생성해야 한다. 그래야만 다음번에 서버에 접속하여 쿠키에 저장된 방문자의 정보를 가져와서 활용할 수 있기 때문이다.


 ① 마지막 방문 일을 표시하는 웹 페이지에 방문한 적이 있는지 없는지를 체크한다.

 ② 없으면 현재 날짜를 저장하는 쿠키 객체를 생성한다.

 ③ 있으면 이전 쿠키가 저장된 날짜를 출력하기 위해 쿠키의 값을 미리 알아내어 문자열 변수에 저장해 두고

 ④ 현재 방문한 시점의 시간을 쿠키의 새로운 값으로 설정한다.


# 마지막 방문일을 출력하는 웹 페이지를 쿠키를 이용하여 작성하기

 lastdate.jsp

<%@ page language="java" import="java.text.DateFormat, java.util.Date" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    // 마지막 방문일을 저장하고 있는 쿠키를 저장할 객체
    Cookie lastDate = null;
   
    // 화면에 출력할 메시지를 저장할 문자열 변수
    String msg = "";
   
    // 마지막 방문일을 저장하고 있는 쿠키가 존재하는지를 판별할 변수
    boolean found = false;
   
    // 현재 시간을 저장
    String newValue = "" + System.currentTimeMillis();
   
    // 쿠키를 얻는다.
    Cookie[] cookies = request.getCookies();
   
    // 마지막 방문 일을 정하고 있는 쿠키를 검색
    if (cookies != null) {
       
        for (int i = 0; i < cookies.length; i++) {
           
            lastDate = cookies[i];
           
            if (lastDate.getName().equals("lastdateCookie")) {
               
                found = true;
                break;
            }
        }
    }
   
    // 처음 방문일 경우 새 쿠키 생성
    if (!found) {    // if (found = false)
       
        msg = "처음 방문 입니다......";
   
        // 쿠키 객체를 생성
        lastDate = new Cookie("lastdateCookie", newValue);
       
        // 쿠키 속성값을 설정

        lastDate.setMaxAge(365*24*60*60);    // 365일
        lastDate.setPath("/");
       
        // 쿠키를 추가
        response.addCookie(lastDate);
    }
   
    else {    // 이미 방문한 적이 있는 클라이언트라면
       
        // 이전 방문시간을 알아내어 long형 변수 conv에 저장
        long conv = new Long(lastDate.getValue()).longValue();
   
        // 방문시간을 출력할 수 있도록 msg 변수에 저장
        Date date = new Date(conv);
        String year = date.getYear() + 1900 + "년";
        String month = date.getMonth() + 1 + "월";
        String day = date.getDay() + "일";
        String hour = date.getHours() + "시";
        String minute = date.getMinutes() + "분";
        msg = "당신의 마지막 방문 : " + year + month + day + hour + minute;
       
        // 쿠키에 새 값을 추가
        lastDate.setValue(newValue);
       
        // 쿠키를 추가
        response.addCookie(lastDate);
    }
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>마지막 방문 일을 출력하는 웹 페이지를 쿠키를 이용하여 작성하기</title>
</head>
<body>
<h2><%= msg %></h2>
</body>
</html>

 첫번째 출력화면

 두번째 출력화면



반응형