[SOLUCIONADO] Como detecto cuando el usuario abandone la pagina ??

Iniciado por Diabliyo, 12 Julio 2008, 02:09 AM

0 Miembros y 1 Visitante están viendo este tema.

SirLanceCC

Citarvaya, si el tiempo (10+5) se queda por abajo del tiempo actual entonces se supone que esta aparte debemos detectar si esta aun o no existente su session
Tu quieres hacer un método que averigue si aun está en la página. Ya te comentamos que eso no se puede por las desventajas que ya describimos. Esto no detecta nada, sólo supone que ya no está, que pasaron 5 minutos y ya se fue.

Por ejemplo en el foro siempre estoy loggueado. La cookie de mi sesión caducará como en mil años. Sin embargo si no accedo a la página después de un rato aparezco como desconectado.


Diabliyo

#11
Cita de: SirLanceCC en 16 Julio 2008, 22:39 PM
Citarvaya, si el tiempo (10+5) se queda por abajo del tiempo actual entonces se supone que esta aparte debemos detectar si esta aun o no existente su session
Tu quieres hacer un método que averigue si aun está en la página. Ya te comentamos que eso no se puede por las desventajas que ya describimos. Esto no detecta nada, sólo supone que ya no está, que pasaron 5 minutos y ya se fue.

Por ejemplo en el foro siempre estoy loggueado. La cookie de mi sesión caducará como en mil años. Sin embargo si no accedo a la página después de un rato aparezco como desconectado.



Ok si ya veo, solo que me estuve empenando en hacerlo de otra forma... pero ya veo que es mejor hacerlo directamente con un temporizados FIJO...

Por otra parte... si el usuario cierra la ventana ya no podre comprobar su hora actual con la hora limite maximo, entonces tendria que comprobar todos los usuarios que esten en la tabla LOG y tengan el campo fehc_logout vacio...

Diabliyo

#12
Listo... Ya pude hacer que la sesion se cierre en un tiempo determinado, pero tambien tomando en cuenta que el usuario NO este activo en la pagina, en el caso que este activo pues le actualiza el tiempo y le agrega tiempo extra. Fue simple:

<?php
function deamon_logd()
{
$ip$_SERVER['REMOTE_ADDR'];
$navget_browser();

//Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

$log_consconsultar_con"LOG""SESION='"session_id(). "'" );

if( mysql_num_rows($log_cons)==) //no existe la SESION, esta entrando nuevo usuario
{
//recolectamos informacion
while (list($key$val)=each($nav))
{
if( !strcmp($key"parent" ) )
$navegador$val;
else if( !strcmp($key"platform" ) )
$so$val;
}

$trama= array(
"nick"=>"'Visitante'",
 "ip"=>"'"$ip"'",
 "so"=>"'"$so"'",
 "navegador"=>"'"$navegador"'",
 "sesion"=>"'"session_id(). "'"
 "fecha_login"=>"'"time(). "'" 
);

insertar_bdd"LOG"$trama );
}
else //la SESION ya existe
{
if( usuario_legitimo() )
{
$trama= array(
"sesion"=>"'"session_id(). "'",
"nick"=>"'"$_SESSION["log_usr"]. "'"
);

actualizar_bdd"LOG"$trama );
}
}

unset($log_cons);

//establece los cierres de sesion
temporizador_de_sesiones();
}

function 
temporizador_de_sesiones()
{
$log_consconsultar_con"LOG""FECHA_LOGOUT=''" ); //consultamos sesiones abiertas
$flag=0//bandera para saber si debemos cerrar la sesion o dejarla abierta

while( $bufmysql_fetch_array($log_cons) )
{
//si la SESION es igual, aun esta activo en la web
if( !strcmpsession_id(), $buf["SESION"] ) ) 
$flag=1//bandera activada

//si la no esta activada, entonces posiblemente no este conectado
if( $flag==)
{
if( ($buf["FECHA_LOGIN"]+(10*60)) < time() ) //si el tiempo se vencio se cierra la sesion
{
$trama= array(
"ID"=>"'"$buf["ID"]. "'"
"FECHA_LOGOUT"=>"'"time(). "'" 
);

actualizar_bdd"LOG"$trama );
}
}
else //entonces esta conectado, se actualiza el tiempo de sesion
{
$trama= array(
"ID"=>"'"$buf["ID"]. "'"
"FECHA_LOGIN"=>"'"time(). "'" 
);

actualizar_bdd"LOG"$trama );
}

unset($trama);
$flag=0//desactivamos bandera
}

unset($buf);
unset($log_cons);
}
?>