Buenas tardes ante todo; feliz año que desde el año pasado no escribo por aquí.
Os voy a exponer la situación a ver qué solución me podéis proponer si tenéis conocimiento de este tema;
Tenemos un sistema donde un usuario hace Login y empieza a trabajar, ese sistema tiene un sistema de cuenta atrás que se activa si el usuario está inactivo (es decir, se resetea cuando escribe, mueve el ratón o hace scroll) y desconecta al usuario del sistema cuando la cuenta atrás llega a cero. En base a esto nos estamos encontrando con el siguiente problema; los usuarios abren múltiples pestañas del sistema entonces cuando cualquiera de esas pestañas llega a cero dropea al usuario del sistema. Lo que queremos es que sólo dropee al usuario si la ventana activa llegara a cero, no cualquiera.
Se os ocurre algo?
Os pego el código actual para el timeout para si queréis lo tengáis como referencia:
<script type="text/javascript">
var interval;
var start_minutes = 29;
var minutes = 29;
var start_seconds = 59;
$( document ).ready(function() {
console.log( "ready!" );
//countdown('countdown');
interval = setInterval('setTimer()', 1000);
$('*').keypress(function() {
//console.log( "Handler for .keypress() called." );
ResetCountdown('countdown');
//$.get('resettimer.php');
});
$('*').mousemove(function() {
console.log( "Handler for .mousemove() called." );
ResetCountdown('countdown');
});
$('*').onscroll(function() {
console.log( "Handler for .onscroll() called." );
ResetCountdown('countdown');
});
});
</script>
Y aquí el código .js con las funciones:
function setTimer()
{
console.log('timer set');
var el = document.getElementById('countdown');
if(seconds == 0)
{
if(minutes == 0)
{
el.innerHTML = "EXPIRED";
clearInterval(interval);
//alert('Your Session has expired, Please relogin again');
window.location = '../control.php?logout=true';
return;
}
else
{
minutes--;
seconds = 60;
}
}
if(minutes > 0)
{
var minute_text = minutes + (minutes > 1 ? ' minutes' : ' minute');
}
else
{
var minute_text = '';
}
var second_text = seconds > 1 ? 'seconds' : 'second';
el.innerHTML = minute_text + ' ' + seconds + ' ' + second_text + '';
seconds--;
}
function ResetCountdown()
{
clearInterval(interval);
seconds = start_seconds;
minutes = start_minutes;
interval = setInterval('setTimer()', 1000);
console.log('timer stopped');
}
Un saludo