La lógica me pide utilizar el evento "onBeforeUnload" en todas las páginas de mi sitio y llamar a un script de servidor para almacenar la hora cada vez que se activa dicho evento. Teniendo en cuenta que hemos almacenado también la hora en la que el usuario accedió a la web por primera vez (inicio de sesión), podemos restar ambas fechas y obtener el tiempo exacto de la visita. He probado varias cosas y lo más cerca que me quedo es ésto:
----- en todas las páginas del sitio : ---------------
Código PHP:
<? session_start();
.....
/*
código de conexión a la bbdd. A continuación dejamos preparada la SQL en el lado servidor para ser ejecutada desde el cliente:
*/
$SentenciaSql="UPDATE Visitantes SET Date_End ='".time()."' WHERE IdVisitante ='".$_SESSION['idvisitante']."'";
?>
<html>
<head></head>
<body onBeforeUnload="eval("<? echo $result=@mysql_query($SentenciaSql);?>");">
.....
</body>
</html>
Se graba bien la fecha en la bbdd cuando se pasa de una página a otra del sitio, pero cuando el usuario cierra el navegador o se mueve hacia otra dirección web ajena a nuestro sitio, el evento no se activa y no se produce la grabación.
Si ponemos:
<body onBeforeUnload="alert("adios");">
El evento responde bien a todos los cierres de navegador. El problema parece ser la llamada desde Javascript a scripts de servidor.
Alguien podría abrir luz en este tema ?, Gracias de antemano y saludos a todos.