반응형
은행 사이트의 상단처럼, 시간 타이머를 보여달라는 요청을 반영했다.
브라우저와 웹로직 서버의 카운트 시간이 다를 수 있기 때문에,
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 |
자바스크립트 문자 숫자 분리/ 배열 생성 (0) | 2018.11.29 |
[Javascript] javascript 시간 연장 타이머 코드 (0) | 2018.11.29 |
menu javascript (0) | 2018.10.26 |