クライアントが 10 分以上アイドル状態になったときにクライアントをログアウトするタイマーを作成しようとしています。ユーザーが 2 番目のタブを開かない限り正常に動作する以下のコードを作成しました。2 番目のウィンドウまたはタブを開くクライアントが多数あり、2 番目のタブが開いている間、カウンターの速度が上がります。タブ/ウィンドウがより適切に同期されるように、次のコードを改善する方法を探しています。
var cookies='off'; // var to check if cookies are turned off
var alertTimes=0; // alturnative to cookies
$(function(){
resetCookies();
var loginTime=getCookie("loginTime");
if (loginTime!=null && loginTime!=""){ cookies='on'; }
checkAlerts();
});
function resetCookies(){
setCookie("loginTime",'10',1);
alertTimes=0;
}
function checkTime() {
if(cookies=='on'){
var loginTime=getCookie("loginTime");
if (loginTime!=null && loginTime!=""){
var newTime=loginTime-1;
if(newTime==0){ autoLogout(); return false;}
setCookie("loginTime",newTime,1);
}else{ autoLogout(); return false;}
}else{
alertTimes++;
if(alertTimes>=10){ autoLogout(); return false;}
}
setTimeout(checkTime, 600000);
}
function setCookie(c_name,value,exdays){
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name){
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++){
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name){ return unescape(y); }
}
}
function autoLogout(){
window.location.href=("logout.php");
}