usuario - cerrar sesión despues de un tiempo php
Forzar el cierre de sesión de los usuarios si los usuarios están inactivos durante un determinado período de tiempo (9)
Depende de cómo están "conectados" en primer lugar. ¿La caducidad de la sesión en el servidor no lo hace por usted? Si realmente quieres hacerlo de forma manual, podrías usar algunos javascript en un setTimeout, pero eso es feo
Supongamos que está haciendo una aplicación bancaria. Si los usuarios inician sesión en su sitio, ¿cómo detectar su inactividad y pedirles que cierren sesión si permanecen inactivos durante un período de tiempo? Inactivo aquí significa que han cambiado a otras pestañas o que no tocan la aplicación del navegador.
Creo que creo que puedo hacer esto registrando cada movimiento del mouse o movimiento del teclado cuando los usuarios lo están haciendo en CADA página de mi aplicación. Pero el código sería muy feo y difícil de mantener. ¿Hay otras maneras más elegantes de hacer esto?
Por lo general, la duración de la sesión se utiliza para determinar si un usuario está conectado o no. Entonces, podría establecer un indicador en la sesión que representa este estado. Y si falta (o el usuario aún no se conectó o la sesión se agotó), se considera que no inició sesión.
Si el usuario está solicitando nuevas páginas / datos de su servidor de forma regular, ajustar el tiempo de espera de la sesión en PHP debería funcionar para esto (suponiendo que esté utilizando sesiones de PHP).
Si la preocupación es que podrían estar sentados en una página durante un buen período de tiempo sin viajes al servidor (por ejemplo, completar un formulario largo), y desea distinguir entre esto y el usuario simplemente cambiando a otra ventana, usted podría hacer algo como usar javascript para solicitar datos usando XMLHTTPRequest cada cinco minutos para mantener viva la sesión. Puede usar los eventos window.focus y window.onblur en javascript para detener y reiniciar este mecanismo (creo que hay algunas diferencias para IE, aquí hay una buena explicación).
Una forma muy fácil y efectiva de hacer esto es colocar algo como esto en la sección HEAD HTML:
<META HTTP-EQUIV="refresh" CONTENT="1800;URL=logout.php?timeout">
Reemplace el tiempo de espera de logout.php? Con el script apropiado. En el ejemplo anterior, si? Timeout está en la cadena de consulta, les muestro una página de inicio de sesión con información que indica que han sido desconectados debido a inactividad.
Reemplace 1800 con el tiempo en segundos que desea permitir que permanezcan inactivos antes de cerrarlas automáticamente. Establezca esto al mismo tiempo que tiene establecida la caducidad de la sesión.
Editar - Otro mecanismo fácil de implementar es tener una variable de sesión llamada last_time, o last_activity, o algo similar, y configurarlo en una marca de tiempo cada vez que haya actividad. En la mayoría de mis cosas, tengo un archivo de inclusión general en el que hago esto. En el mismo archivo, puede verificar para asegurarse de que esté dentro de las restricciones que ha establecido para una sesión activa. Si ha sido demasiado largo, simplemente haga un redireccionamiento de 300 a la página de cierre de sesión y muestre el mensaje de inactividad apropiado allí.
¡Buena suerte!
Ian
Puede tener un poco de javascript que verifica el servidor cada x minutos para ver cuándo fue la última actividad del usuario. No debería haber más que unas pocas líneas de código. También agregaría una meta actualización si el usuario tiene javascript deshabilitado.
Hola chicos, este es el código que uso. No es mío, pero lo modifiqué a su "perfección".
// Add the following into your HEAD section
var timer = 0;
function set_interval() {
// the interval ''timer'' is set as soon as the page loads
timer = setInterval("auto_logout()", 10000);
// the figure ''10000'' above indicates how many milliseconds the timer be set to.
// Eg: to set it to 5 mins, calculate 5min = 5x60 = 300 sec = 300,000 millisec.
// So set it to 300000
}
function reset_interval() {
//resets the timer. The timer is reset on each of the below events:
// 1. mousemove 2. mouseclick 3. key press 4. scroliing
//first step: clear the existing timer
if (timer != 0) {
clearInterval(timer);
timer = 0;
// second step: implement the timer again
timer = setInterval("auto_logout()", 10000);
// completed the reset of the timer
}
}
function auto_logout() {
// this function will redirect the user to the logout script
window.location = "your_logout_script.php";
}
// Add the following attributes into your BODY tag
onload="set_interval()"
onmousemove="reset_interval()"
onclick="reset_interval()"
onkeypress="reset_interval()"
onscroll="reset_interval()"
Goo suerte
Ricardo
Puedes hacerlo de forma más elegante con guiones bajos y jquery javascript-
$(''body'').on("click mousemove keyup", _.debounce(function(){
// logout user here
}, 1800000)) // 30 minutes inactivity
Podemos mejorar nuestros códigos para jquery ahora
idleTime = 0;
$(document).ready(function() {
var idleInterval = setInterval("timerIncrement()", 60000); // 1 minute //60000
$(this).mousemove(function(e) {
idleTime = 0;
});
$(this).keypress(function(e) {
idleTime = 0;
});
});
function timerIncrement() {
idleTime = idleTime + 1;
if (idleTime >= 5) {
window.location = $(''#base_url'').val() + ''home/logout_user'';
}
}
Tomé la marca de tiempo ''ahora'' y compruebo cada clic si la demora es de menos de 3000 segundos o más de mil millones de segundos, lo que significa que el usuario acaba de iniciar sesión, si no es así, se redireccionará para cerrar sesión
var time = 0;
$(document).on(''click'', function() {
var now = Date.now() / 1000 | 0;
if (now - time < 3000 || now - time > 1480000000) {
time = now;
} else {
window.location.replace("http://url");
}
})