Estoy tratando de construir un sistema simple para indicar si el usuario está conectado o no. pero tengo un problema

Cuando el usuario cierra el grifo o el navegador, el código ajax no puede actualizar la página que maneja la actividad de seguimiento del usuario.

Mi código php que cambia el valor a 0 si el usuario estuvo inactivo durante 2 minutos

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 61)) {
    $query = "UPDATE  [ccc].[users] SET active = 0 WHERE ldap ='$ldap'";

    sqlsrv_query($conn,$query);
}

Código jquery para verificar cada 5 segundos

$(document).ready(function () {
/*check existing users*/
function session_checking() {
    $.post("../ajax-session.php", function (data) {

    });
}
setInterval(session_checking, 5000);
});

¿Cómo puedo cambiar el estado a 0 si el usuario cerró el navegador?

0
user3763103 26 dic. 2016 a las 17:41

3 respuestas

La mejor respuesta

Hasta donde yo sé, no hay forma de notificar al servidor cuando el usuario cierra la pestaña / ventana.

Tal vez podría crear una tarea que compruebe constantemente la actividad de sus usuarios, inactivándolos:

UPDATE users SET is_online = 0 WHERE is_online = 1 AND last_activity <= [WHAT YOU NEED]

Recuerde crear los índices adecuados en su tabla, teniendo en cuenta que ejecutará la consulta anterior con frecuencia.

0
nikoskip 26 dic. 2016 a las 15:31

Simplemente configure una variable que tenga los datos de la sesión en el proceso de inicio de sesión. Por lo tanto, puede verificar si el usuario está activo o no más tarde. me gusta:

$_SESSION["user"] = array(
   "s_name" => "user1@email.com", 
   "login_time" => time()
);


if($_SESSION["user"]["login_time"] < time()+2*60){ unset($_SESSION["user"]); }

in application:
if(isset($_SESSION["user"])){ ... }
0
Tamer Durgun 26 dic. 2016 a las 15:17

Use setcookie para esto

setcookie('newtest', 'newtest', 0);
0
user6533277user6533277 26 dic. 2016 a las 14:44