Medindo o tempo online no site
Pergunta
Gostaria de medir quanto tempo um usuário gasta no meu site. É necessário para um site comunitário onde você possa dizer: "O usuário X tem passado 1397 minutos aqui".
Depois de ler alguns documentos sobre isso, sei que não há maneira perfeita de conseguir isso. Você não pode medir o tempo exato. Mas estou procurando uma abordagem que dê uma boa aproximação.
Como você pôde fazer isso? Minhas idéias: 1) Adicionando 30 segundos ao contador de tempo on -line em todas as visualizações de páginas. 2) Em todas as visualizações de página, salve o registro de data e hora atual. Na próxima visualização, adicione a diferença entre o registro de data e hora salvo e o registro de data e hora atual ao contador de tempo online.
Eu uso o PHP e o MySQL se isso importa.
Espero que você possa me ajudar. Desde já, obrigado!
Solução
Dois fatores estão trabalhando contra você -
Você só pode coletar estatísticas pontuais (visualizações de página) e não há uma maneira razoável de detectar o que aconteceu entre esses pontos;
Mesmo assim, você estaria contando o horário da janela do navegador, não o tempo do usuário; Os usuários podem facilmente ter várias guias abertas em várias instâncias do navegador simultaneamente.
Suspeito que sua melhor aproximação esteja atribuindo uma quantidade média de tempo de atenção por clique e, em seguida, multiplicando. Mas então você pode medir os cliques.
Outras dicas
Provavelmente, isso é inútil ... e se o usuário tiver três guias abertas e estiver "visitando" o seu site enquanto realmente trabalha nas outras duas guias? Você quer contar isso?
Por que não apenas medir o que realmente pode ser medido?: Referências, visualizações de página, cliques, etc.
Coletar e anunciar esses tipos de números estão completamente alinhados com o resto do mundo das métricas da web.
Além disso - se alguém tivesse uma página da web e, digamos, saia de duas semanas, qual a melhor forma de explicar?
O que você poderia fazer é verificar se um usuário é ativo na página e, em seguida, envie uma solicitação AJAX ao seu servidor a cada x segundos (60 segundos ficariam bem?) Que um usuário está ativo ou não na página.
Em seguida, você pode usar o segundo método que você mencionou para calcular a diferença de tempo entre dois registros de data e hora 'ativos' que não são separados por mais de um ou dois intervalos. Adicioná -los daria o tempo gasto pelo usuário no seu site.
O Google Analytics inclui um muito poderoso Registro/rastreamento de eventos Mecanismo que você pode personalizar e explorar as medidas realmente boas do comportamento do usuário - eu examinaria isso
Uma solução muito simples é usar um iframe oculto que carrega uma página da web PHP periodicamente. A página da web carregada registra a hora de início (se não existir) e o tempo de parada. Quando a pessoa sai da página, você fica com o tempo em que a pessoa chegou ao site e a última vez que esteve lá. Nesse caso, o registro de data e hora é atualizado a cada 3 segundos.
Eu uso arquivos para manter as informações de log. O nome do arquivo que eu uso consiste em ipaddress.htm mensal do mês de ano
Exemplo de código php iframe. Coloque isso em Yourwebsite/yourAnalyticicsiframecode.php:
<?php
// get the IP address of the sender
$clientIpAddress=$_SERVER['REMOTE_ADDR'];
$folder = "yourAnalyticsDataFolder";
// Combine the IP address with the current date.
$clientFileRecord=$folder."/".date('d-M-Y')." ".$clientIpAddress;
$startTimeDate = "";
// check to see if the folder to store analytics exists
if (!file_exists($folder))
{
if (!mkdir($folder))
return; // error - just bail
}
if (file_exists($clientFileRecord) )
{
//read the contents of the clientFileRedord
$lines = file($clientFileRecord);
$count = 0;
// Loop through our array, show HTML source as HTML source; and line numbers too.
foreach ($lines as $line_num => $line)
{
echo($line);
if ($count == 0)
$startTimeDate = rtrim( $line );
$count++;
}
}
if ($startTimeDate == "")
$startTimeDate = date('H:i:s d-M-Y');
$endTimeDate = date('H:i:s d-M-Y');
// write the start and stop times back out to the file
$file = fopen($clientFileRecord,"w");
fwrite($file,$startTimeDate."\n".$endTimeDate);
fclose($file);
?>
O javascript para recarregar periodicamente o iframe na página principal da web.:
<!-- Javascript to reload the analytics code -->
<script>
window.setInterval("reloadIFrame();", 3000);
function reloadIFrame() {
document.getElementById('AnalyticsID').src = document.getElementById('AnalyticsID').src
// document.frames["AnalyticsID"].location.reload();
}
</script>
O iframe na página principal da web se parece com o seguinte:
<iframe id="AnalyticsID" name="AnalyticsID" src="http://yourwebsite/yourAnalyticsiFrameCode.php" width="1"
height="1" frameborder="0" style="visibility:hidden;display:none">
</iframe>
Uma maneira muito simples de exibir os arquivos de carimbo de hora:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
Analytics results
<br>
<?php
$folder = "yourAnalyticsDataFolder";
$files1 = scandir($folder);
// Loop through the files
foreach ($files1 as $fn)
{
echo ($fn."<br>\n");
$lines = file($folder."/".$fn);
foreach ($lines as $line_num => $line)
{
echo(" ".$line."<br>\n");
}
echo ("<br>\n <br>");
}
?>
</body>
</html>
Você recebe uma página de resultados como esta:
22-Mar-2015 104.37.100.30
18:09:03 22-mar-2015
19:18:53 22-mar-2015
22-Mar-2015 142.162.20.133
18:10:06 22-mar-2015
18:10:21 22-mar-2015
Eu acho que o Javascript Analytics do lado do cliente é a solução para isso.
Você tem o Google Analitycs, Piwik, e também há ferramentas comerciais em JS que fazem exatamente isso.