반응형
    
    
    
  
은행 사이트의 상단처럼, 시간 타이머를 보여달라는 요청을 반영했다.
브라우저와 웹로직 서버의 카운트 시간이 다를 수 있기 때문에,
5분 마다 쿠키에 저장된 expired time을 가져와 계산.
<script type="text/javascript">
//<![CDATA[
    /* 2018.11.29 시간 연장 타이머 */
    var iSecond; // 초 단위로 환산
    var timerChecker = null;
    calcOffset(); /*화면을 불러올 때 마다 초기화*/
      function calcOffset() {
            var serverTime  = getCookie('serverTime');
            serverTime  = serverTime == null ? null : Math.abs(serverTime);
            /*브라우저 시간과 서버 시간과의 차이*/
            var clientTimeOffset = (new Date()).getTime() - serverTime ;
            var d = new Date();
            d.setTime(d.getTime() + 12*60*60*1000);
            setCookie('clientTimeOffset', clientTimeOffset, d );
     }
     function checkSession() {
               var sessionExpiry = Math.abs(getCookie('sessionExpiry'));
               var timeOffset = Math.abs(getCookie('clientTimeOffset'));
               var localTime = (new Date()).getTime();
               var d = new Date();
            d.setTime(d.getTime() + 12*60*60*1000);
               setCookie('remainTime', (sessionExpiry - (localTime - timeOffset)), d);
               var weblogicCountTm = (sessionExpiry - (localTime - timeOffset));
               var weblogicSc = weblogicCountTm / 1000;
               console.log( weblogicCountTm / 1000);
               iSecond = parseInt(weblogicSc);
               return weblogicCountTm;
               /* localTime - timeOffset > (sessionExpiry-(offset||0)); 세션이 만료되었는지 여부 반환*/
       }
    setSessionInfo();
    function fncClearTime(){
        iSecond = 3600;
    }
    window.onload = function(){
        fncClearTime();
        initTimer();
    }
    Lpad = function(str, len){
        str = str + "";
        while(str.length < len){
            str = "0" + str;
        }
        return str;
    }
    initTimer = function(){
        var timer = document.getElementById("timer");
        rHour = parseInt(iSecond/3600);
        rHour = rHour % 60;
        rMinute = parseInt(iSecond/60);
        rMinute = rMinute % 60;
        rSecond = iSecond % 60;
        if(iSecond > 0){
            timer.innerHTML = /* " " + Lpad(rHour, 2) + "시간" +  */Lpad(rMinute, 2) + "분 " + Lpad(rSecond,2) + "초";
            iSecond--;
            // 1 초 간격으로 체크
            timerCheker = setTimeout("initTimer()", 1000);
            // 5분에 한 번씩 세션 시간과 동기화.
            if(iSecond % 300 == 0)  checkSession();
            /* 세션 종료 시간 5분 전일 경우 재연장 알람 */
            if(iSecond == 300){
                windowOpen(contextPath + "/btwnflr/alertPop.do","timeAlerPop",329,131,1,"center",0);
            }
        }else{
            alert("사용시간 10분이 지나 로그인 창으로 돌아갑니다.");
            logoutUser();
        }
    }
    function refreshTimer(){
        var xhr = initAjax();
        xhr.open("POST", "<c:url value='/inc/incHeader.do' />", false);
        xhr.send();
        fncClearTime();
    }
    function logoutUser(){
        clearTimeout(timerChecker);
        var xhr = initAjax();
        xhr.open("POST", "<c:url value='/login/logOut.do' />", false);
        xhr.send();
        location.reload();
    }
    function initAjax(){ //브라우저에 따른 AjaxObject 인스턴스 분기 처리
        var xmlhttp = new XMLHttpRequest();
        return xmlhttp;
    }
//]]>
</script>
결과물


반응형
    
    
    
  'Programming Language > Javascript' 카테고리의 다른 글
| 왼쪽 사이드 토글버튼 (0) | 2018.12.12 | 
|---|---|
| (스크랩)[자바스크립트] LocalStorage, SessionStorage 클라이언트에 정보 저장 (0) | 2018.12.07 | 
| 자바스크립트 문자 숫자 분리/ 배열 생성 (1) | 2018.11.29 | 
| [Javascript] javascript 시간 연장 타이머 코드 (0) | 2018.11.29 | 
| menu javascript (0) | 2018.10.26 |