Как отслеживать продолжительность посещения для одностраничного веб-сайта

У меня есть страница веб-сайта, на которой посетитель проводит большую часть своего времени. Сайт использует PHP с Codeigniter и jQuery.

Проблема. Тем не менее, я считаю, что системы отслеживания, такие как Piwik, рассчитывают время, проведенное на странице, вычитая время, когда посетитель покидает эту страницу на новую страницу, из времени, когда он загружает страницу. страница.

Есть ли способ обойти это? Может быть, использовать javascript для запуска системы отслеживания, чтобы она знала, что посетитель покидает страницу?


person Nyxynyx    schedule 17.03.2012    source источник
comment
Использование пингера ajax типа onbeforeunload на основе JS — это ЕДИНСТВЕННЫЙ способ определить, когда кто-то покидает страницу, особенно если он уходит, чтобы пойти куда-то еще, и вы никогда не получите от него еще одного обращения.   -  person Marc B    schedule 17.03.2012
comment
То, что сказал Марк Б, или вы можете запустить таймер с интервалом в 10-15 секунд, который пингует ваш сервер, чтобы вы знали, что пользователь все еще находится на странице. Когда пинги перестанут поступать, вы можете предположить, что пользователь ушел.   -  person msigman    schedule 17.03.2012
comment
Почему бы вам не написать это как ответ, с парой строк и, возможно, демонстрацией. Я бы проголосовал за тебя .~)   -  person Billy Moon    schedule 17.03.2012
comment
@MarcB гарантированно ли это событие будет запущено во всех браузерах?   -  person levi    schedule 17.03.2012
comment
@леви: нет. вы не можете зависеть ни от чего на стороне клиента.   -  person Marc B    schedule 18.03.2012


Ответы (2)


Редактировать: я добавил немного «соли» в $ id, я не знаю.. У меня такое ощущение, что он еще более уникален, хотя я думаю, что маловероятно, что будут похожие идентификаторы из-за использования микро секунды, но просто чтобы быть уверенным

Что-то вроде этого
JQuery: Ajax-запрос к StayAlive.php каждые 10 секунд

function pingPing(){
    $.ajax(
    {
        type:'GET',
        url:'StayAlive.php', 
        success: function() 
        {
            setTimeout(pingPing, 10000);
        }
    }
}


PHP: StayAlive.php

<?php
function newUser(){
  $id=sha1($_SERVER['HTTP_USER_AGENT'].microtime().$_SERVER['REMOTE_ADDR']);
  setcookie("id", $id, time()+3600*24*365);
  //create new row in the database for that $id

}
if (isset($_COOKIE["id"])){
  //check if the id is in the database
  //if yes => time_spent+=10
  //if no => newUser();
}
else
  newUser();
?>
person Adi    schedule 17.03.2012

Вы можете использовать следующее, чтобы отправить запрос Ajax на страницу, когда пользователь покидает страницу (им не обязательно загружать новую).

$(window).unload( function () {
$.ajax({
    type: "POST",
    url: "yourpage.php",
    data: {
        command: "disconnect"
    },
    dataType: "json",
    async: false,
    success: function(data) {}
});
});

Вы можете создать javascript, который генерирует временную метку пользователя, когда он загружает страницу, и передает ее на страницу .php, когда он уходит. Подсчитайте разницу во временных метках, чтобы определить, сколько времени они провели на странице.

person JoolzCheat    schedule 18.03.2012