Buenas noches, tengo la siguiente situacion que no logro arreglar, estoy tratando de hacer un seguimiento de usuarios en mi web, quiero saber cuanto tiempo pasa un usuario en cada una de las secciones y saber que articulos visita, entonces, primero en el onload del Body llamo esta funcion:
Código:
function seguimiento(){
var urlActual = location.search;
urlActual = urlActual.replace('?','');
urlActual = urlActual.split('&');
urlActual = urlActual[0].split('=');
$.ajax({
type:"POST",
url:"<?php echo $_G_->baseURL ?>?F=usuarios&_f=iniciarTiempo",
dataType:"html",
data:{F:urlActual[1]},
success:function(response){
//alert(response);
}
});
}
Lo que realiza la funcion anterior es mandar llamar una funcion de php donde verifico a que seccion entro y si es de las que me interesa registrar datos, si es entonces inicialiso una variable de session asignandole el tiempo en el momento que entro, si no entoces destruyo esa variable de session:
Código PHP:
public function iniciarTiempo(){
if(isset($_SESSION['idU']) && $_SESSION['idU'] != ''){
$seccion = $_POST['F'];
if($seccion == "tips" || $seccion == "privilegios" || $seccion == "noticias" || $seccion == "herramientas"){
$_SESSION['tiempoSeccion'] = time();
}else{
unset($_SESSION['tiempoSeccion']);
}
}
}
Despues en el evento beforeunload:
Código:
$(window).bind('beforeunload', function(){
var urlActual = location.search;
$.ajax({
type:"POST",
url:"<?php echo $_G_->baseURL ?>?F=usuarios&_f=actividadUsuarioGeneral",
dataType:"html",
data:{url:urlActual}
});
});
Mando ejecutar otra funcion de php en donde inserto los datos en caso de que el usurio este en alguna seccion que deseo registrar:
Código PHP:
public function actividadUsuarioGeneral(){
if(isset($_SESSION['idU']) && $_SESSION['idU'] != ''){
$tiempo = $this->convertirHorasMinutosSegundos($_SESSION['tiempoCompleto']);
$actividad = mysql_query("UPDATE usuarios SET tiempo = '".$tiempo."' WHERE id = '".$_SESSION['idU']."'");
if($_SESSION['tiempoSeccion'] > 0){
$cadena = ereg_replace("[?]", "", $_POST['url']);
$variables = explode("&",$cadena);
$seccion = explode("=",$variables[0]);
$funcion = explode("=",$variables[1]);
$acceso = "Menu";
if($seccion[1] == "tips"){
$idCategoria = explode("=",$variables[2]);
if($funcion == "ver"){
$idPublicacion = explode("=",$variables[3]);
}
}elseif($seccion[1] == "privilegios"){
$idPrivilegio = explode("=",$variables[2]);
}elseif($seccion[1] == "noticias"){
$idPublicacion = explode("=",$variables[2]);
}elseif($seccion[1] == "herramientas"){
$idHerramientas = explode("=",$variables[2]);
}
$consulta = mysql_query("INSERT INTO actividad(idUsuario,idCategoria,acceso) VALUES ('".$_SESSION['idU']."','".$idCategoria[1]."','".$acceso."')");
}
}
}
Bien ahora el problema es que a veces me inserta los datos y a veces no, no se si sea porque tarda mas en ejecutarse la consulta que lo que tarda en ejecutarse el evento beforeunload. Alguna sugerencia de como puedo detener el evento beforeunload hasta que los datos en la BD sean insertados, o como puedo realizar correctamente el seguimiento del usuario que requiero. Espero me halla dado a entender, gracias.