1) 사이트의 주민등록번호 INPUT에 크롬의 자동 완성 기능으로 인하여, 아이디와 비밀번호가 자동으로 입력 되어 버립니다. 2) 자동 입력되어진 텍스트 입력값으로 인하여 숫자 유효성 체크 함수가 자동으로 호출이 되어 alert창이 뜨게 됩니다. 3) 위 소스 코드를 이용하여 문제를 해결합니다.
브라우저에서 자바스크립트의 setTimeout을 이용하여 타이머 셋팅을 한 후 원하는 시간이 되면 타이머를 초기화 하고 ajax로 세션 유지 처리를 하는 프로그램를 호출하면 됩니다.
var timeoutHnd = null;
var logouTimeInterval = 3 * 60 * 1000; // 3 mins here u can increase session time
function OnTimeoutReached() {
$.ajax({
url:'세션 유지를 위한 처리 주소'
});
ResetLogOutTimer();
}
function ResetLogOutTimer() {
clearTimeout(timeoutHnd);
// set new timer
timeoutHnd = setTimeout('OnTimeoutReached();', logouTimeInterval);
}
timeoutHnd = setTimeout('OnTimeoutReached();', logouTimeInterval);
beforeunload 이벤트의 경우 window.addEventListener를 통해서 처리를 할 때 잘 되었습니다.
단순히 beforeunload만을 사용할 경우 페이지 내에서 새로고침, 링크 연결 등 다양한 액션에도 동작을 하게 되어 원하는 결과를 얻을 수 없습니다.
그래서 각각의 이벤트를 확인하여 진행이 되지 않도록 처리를 한 후 브라우저가 꺼졌을 경우에만 처리가 되도록 합니다.
ajax 사용시 async 를 false로 처리를 하여 비동기 통신이 아닌 동기 통신으로 변경을 하여야 처리가 됩니다.
var closing_window = false;
$(window).on('focus', function () {
closing_window = false;
//if the user interacts with the window, then the window is not being
//closed
});
$(window).on('blur', function () {
closing_window = true;
if (!document.hidden) { //when the window is being minimized
closing_window = false;
}
$(window).on('resize', function (e) { //when the window is being maximized
closing_window = false;
});
$(window).off('resize'); //avoid multiple listening
});
$('html').on('mouseleave', function () {
closing_window = true;
//if the user is leaving html, we have more reasons to believe that he's
//leaving or thinking about closing the window
});
$('html').on('mouseenter', function () {
closing_window = false;
//if the user's mouse its on the page, it means you don't need to logout
//them, didn't it?
});
$(document).on('keydown', function (e) {
if (e.keyCode == 91 || e.keyCode == 18) {
closing_window = false; //shortcuts for ALT+TAB and Window key
}
if (e.keyCode == 116 || (e.ctrlKey && e.keyCode == 82)) {
closing_window = false; //shortcuts for F5 and CTRL+F5 and CTRL+R
}
});
// Prevent logout when clicking in a hiperlink
$(document).on("click", "a", function () {
closing_window = false;
});
// Prevent logout when clicking in a button (if these buttons rediret to some page)
$(document).on("click", "button", function () {
closing_window = false;
});
// Prevent logout when submiting
$(document).on("submit", "form", function () {
closing_window = false;
});
// Prevent logout when submiting
$(document).on("click", "input[type=submit]", function () {
closing_window = false;
});
var toDoWhenClosing = function() {
$.ajax({
type: "POST",
url: "/logout.php",
async: false
});
return;
};
window.addEventListener("beforeunload", function (e) {
if (closing_window) {
toDoWhenClosing();
}
});
CREATE INDEX TABLE_idx_01
ON TABLE (use_start_dt, use_end_dt);
SHOW INDEX FROM TABLE;
3. 데이터 저장 방법 (2019년 기준)
- A라는 데이터를 2019년까지만 사용하고 A-1을 2020년으로 사용하게 할 경우 - A와 A-1 2개의 데이터를 만들고, - A의 사용 종료시간은 '2019-12-31 23:59:59' - A-1의 사용시간은 '2020-01-01' 종료시간은 '9999-12-31 23:59:59'으로 합니다. - 그럼 2020년이 되었을 때 자동으로 A는 조회가 안되고 A-1만 조회가 되게 됩니다.
1) 계속 사용 use_start_dt : '2019-01-01' use_end_dt : '9999-12-31 23:59:59' 2) 2019년에만 사용 use_start_dt : '2019-01-01' use_end_dt : '2019-12-31 23:59:59' 3) 2020년부터 사용 use_start_dt : '2020-01-01' use_end_dt : '9999-12-31 23:59:59'
4. 데이터 조회 방법
- 현재 날짜를 상수로 하여 BETWEEN 뒤로 칼럼을 두어 조회를 합니다.
SELECT * FROM TABLE
WHERE NOW() BETWEEN use_start_dt AND use_end_dt
조회 칼럼이 String으로 01월 ~ 12월로 데이터가 저장 되었을 때 처리하는 방법입니다. 데이터를 조회할 때는 일반적으로 Date 타입으로 저장을 하여 조회를 합니다. 하지만 월별 데이터를 조회하는 빈도가 많다면 월 칼럼을 생성하여 사용하는 것도 하나의 대안입니다.
SELECT * FROM TABLE
WHERE COL = DATE_FORMAT( NOW(), '%m' )
;
SELECT * FROM TABLE
WHERE COL BETWEEN DATE_FORMAT( NOW(), '%m' )
AND DATE_FORMAT( DATE_ADD(NOW(), INTERVAL + 2 MONTH), '%m' )
;
날짜 칼럼으로 저장되어 있을 때는 월 별 조회 시 아래의 내용을 조합하여 사용하시면 됩니다.
- 날짜 칼럼을 'YYYY-MM-DD' 값을 조회시에는 자동으로 00:00:00으로 들어가게 됩니다. - 마지막 날짜에 하루를 더해야 정확한 데이터를 조회할 수 있습니다.
SELECT * FROM TABLE
WHERE COL BETWEEN DATE_FORMAT(CONCAT(DATE_FORMAT( NOW(),'%Y-%m'),'-1'),'%Y-%m-%d')
AND DATE_FORMAT(DATE_ADD(LAST_DAY(NOW()), INTERVAL + 1 DAY),'%Y-%m-%d')