@@ -175,6 +175,6 @@
|
||||
</jsp-config>
|
||||
|
||||
<session-config>
|
||||
<session-timeout>10</session-timeout>
|
||||
<session-timeout>30</session-timeout>
|
||||
</session-config>
|
||||
</web-app>
|
||||
@@ -145,6 +145,6 @@
|
||||
</jsp-config>
|
||||
|
||||
<session-config>
|
||||
<session-timeout>10</session-timeout>
|
||||
<session-timeout>30</session-timeout>
|
||||
</session-config>
|
||||
</web-app>
|
||||
@@ -31,8 +31,12 @@
|
||||
<script language="javascript" src="<c:url value="/js/custom.js"/>"></script>
|
||||
<script language="javascript" src="<c:url value="/js/common-${locale}.js"/>"></script>
|
||||
<script type="text/javascript">
|
||||
/* 자동 로그아웃: iframe 내 활동을 sessionStorage에 기록 (main.jsp 타이머와 공유) */
|
||||
(function() { var m = function() { sessionStorage.setItem('lastActivity', String(Date.now())); }; ['mousemove','keydown','click','touchstart'].forEach(function(e){ document.addEventListener(e, m, true); }); })();
|
||||
/* 자동 로그아웃: 서버로 실제 요청이 발생한 경우에만 활동으로 기록 (main.jsp 타이머와 sessionStorage 공유) */
|
||||
(function() {
|
||||
var mark = function() { sessionStorage.setItem('lastActivity', String(Date.now())); };
|
||||
mark(); // 화면(프레임) 로드 자체가 서버 요청이므로 활동으로 기록
|
||||
$(document).ajaxSend(mark); // 이후 이 프레임에서 발생하는 모든 AJAX 요청을 활동으로 기록
|
||||
})();
|
||||
</script>
|
||||
<script language="javascript" src="<c:url value="/js/jquery.inputmask.bundle.min.js"/>"></script>
|
||||
<script language="javascript" src="<c:url value="/js/jquery.searchabledropdown-1.0.8.min.js"/>"></script>
|
||||
|
||||
@@ -305,11 +305,13 @@
|
||||
});
|
||||
$("input[name=changePassword]").keydown(function(event){
|
||||
if ( event.which == 13 ) {
|
||||
event.preventDefault();
|
||||
submitChangePassword();
|
||||
}
|
||||
});
|
||||
$("input[name=confirmPassword]").keydown(function(event){
|
||||
if ( event.which == 13 ) {
|
||||
event.preventDefault();
|
||||
submitChangePassword();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -166,10 +166,8 @@
|
||||
location.href = '<%=request.getContextPath()%>/rms/logout.do';
|
||||
}
|
||||
|
||||
/* 상위 프레임(main.jsp) 활동 감지 */
|
||||
['mousemove', 'keydown', 'click', 'touchstart'].forEach(function (e) {
|
||||
document.addEventListener(e, markActivity, true);
|
||||
});
|
||||
/* 상위 프레임(main.jsp)에서 발생하는 AJAX 요청만 활동으로 기록 (마우스 이동/클릭만으로는 갱신되지 않음) */
|
||||
$(document).ajaxSend(markActivity);
|
||||
|
||||
/* 주기적 유휴 시간 체크 */
|
||||
setInterval(function () {
|
||||
|
||||
@@ -555,7 +555,35 @@
|
||||
<% session.setAttribute("dualLogin", "N"); %>
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
// 세션(자동로그아웃) 타임아웃 카운트다운 - main.jsp의 유휴시간 판단과 동일한 sessionStorage 값을 공유한다.
|
||||
(function () {
|
||||
var IDLE_MS = ${autoLogoutTimeout} * 60 * 1000;
|
||||
|
||||
function getLastActivity() {
|
||||
var t = sessionStorage.getItem('lastActivity');
|
||||
return t ? parseInt(t, 10) : Date.now();
|
||||
}
|
||||
|
||||
function formatRemain(ms) {
|
||||
if (ms < 0) ms = 0;
|
||||
var totalSec = Math.floor(ms / 1000);
|
||||
var mm = Math.floor(totalSec / 60);
|
||||
var ss = totalSec % 60;
|
||||
return (mm < 10 ? '0' + mm : mm) + ':' + (ss < 10 ? '0' + ss : ss);
|
||||
}
|
||||
|
||||
function updateSessionTimeoutTimer() {
|
||||
var remain = IDLE_MS - (Date.now() - getLastActivity());
|
||||
$('#sessionTimeoutTimer').text('세션 만료까지 ' + formatRemain(remain));
|
||||
}
|
||||
|
||||
$(function () {
|
||||
updateSessionTimeoutTimer();
|
||||
setInterval(updateSessionTimeoutTimer, 1000);
|
||||
});
|
||||
})();
|
||||
|
||||
</script>
|
||||
</head>
|
||||
@@ -568,11 +596,12 @@
|
||||
<ul>
|
||||
<li style="width:240px;">
|
||||
<a style="width:240px; cursor: default"
|
||||
href="#"><span><%=SessionManager.getUserName(request) %>(<%=SessionManager.getUserId(request) %>-<%=System.getProperty("inst.Name") %>)</span>
|
||||
href="#"><span><%=SessionManager.getUserName(request) %>(<%=SessionManager.getUserId(request) %></span>
|
||||
<span onClick="javascript:openColorPopup();"><%=localeMessage.getString("screen.customer") %></span>
|
||||
<% if (!"".equals(LastLoginYms.trim())) { %>
|
||||
<span style="display:block;font-size:10px;"><%=localeMessage.getString("screen.lastLogin") %> : <%=LastLoginYms%> [ <%=LastLoginIp%> ]</span>
|
||||
<span style="display:block;font-size:10px;"><%=localeMessage.getString("screen.lastLogin") %> : <%=LastLoginYms%></span>
|
||||
<% } %>
|
||||
<span id="sessionTimeoutTimer" style="display:block;font-size:10px;"></span>
|
||||
</a></li>
|
||||
<li style="width:100px; line-height:80px; text-align:center;">
|
||||
<select id="selectLocale" name="locale" style="width:60px; padding: 2px; text-align:center;">
|
||||
|
||||
@@ -387,7 +387,7 @@
|
||||
<div class="content_middle" id="content_middle">
|
||||
<div class="search_wrap">
|
||||
<button type="button" class="cssbtn" id="btn_download" level="W" status="DETAIL"><i class="material-icons">cloud_download</i> 이관</button>
|
||||
<button type="button" class="cssbtn" id="btn_deploy" level="W" status="DETAIL"><i class="material-icons">cloud_upload</i> 배포</button>
|
||||
<!-- <button type="button" class="cssbtn" id="btn_deploy" level="W" status="DETAIL"><i class="material-icons">cloud_upload</i> 배포</button> -->
|
||||
<button type="button" class="cssbtn" id="btn_import" level="R" data-bs-toggle="modal"
|
||||
data-bs-target="#uploadModal"><i
|
||||
class="material-icons">upload</i> <%=localeMessage.getString("button.import")%>
|
||||
|
||||
Reference in New Issue
Block a user