2010-08-20 3 views
13

Я ищу, чтобы отслеживать среднее время на веб-сайте (точно так же, как это делает аналитика Google) для внутреннего администрирования.Как отслеживать время пользователя на сайте

Что это самый простой способ сделать это?

+2

Не можете ли вы использовать данные Google Analytics? – ChrisF

+2

Есть уже десяток пакетов, которые это делают. Не изобретайте велосипед, если вам это не нужно. Посмотрите на webalizer, awstats, urchin и т. Д. Это фактически нетривиальная проблема. Определение времени на сайте требует принятия некоторых предположений, поскольку вы знаете только, когда браузер запрашивает контент, а не когда пользователь закрывает окно, переходит на удаленный сайт и т. Д. –

+0

Мы предлагаем правление, которое позволяет администраторам вступать и управлять конкретными сегментами пользовательской базы, и мы хотим предоставить им административную аналитику. – Walker

ответ

18

Вы можете получить время следующих способов:

  1. После того, как пользователь посетит ваш сайт, сохранить текущее время в печенье, как «посетили», и при следующем посещении вы можете захватить его, если он был установлен.
  2. И более дорогой метод: когда страница загружается, запускает таймер js и выгружает страницу на серверное время, которое пользователь отправил и сохранил в db.
  3. И если window.unload не работает в Opera, вы можете отправлять время на сервер каждые 5 секунд и хранить его в БД.

Если вам нужно, я могу написать пример сценария.

UPDATE:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Collect time</title> 
     <script type="text/javascript" src="jquery-1.4.2.min.js"></script> 
     <script type="text/javascript"> 
     $(function() 
     { 
      var start = null; 
      $(window).load(function(event) { 
       start = event.timeStamp; 
      }); 
      $(window).unload(function(event) { 
       var time = event.timeStamp - start; 
       $.post('/collect-user-time/ajax-backend.php', {time: time}); 
      }) 
     }); 
     </script> 
    </head> 
    <body> 

    </body> 
</html> 

И бэкенд сценарий:

<?php 
$time = intval($_POST['time']); 
if (!file_exists('data.txt')) { 
    file_put_contents('data.txt', $time . "\n"); 
} else { 
    file_put_contents('data.txt', $time . "\n", FILE_APPEND); 
} 

Но, как я сказал, что это wouldn `работает в браузере Опера

+1

это 'window.onunload' – jordanstephens

+0

да вы прав, я сделал ошибку, извините меня –

+0

Удивительно, спасибо за помощь - Мне бы хотелось увидеть сценарий, если у вас есть время написать быстрый? Могу ли я использовать page.unload для всего домена? – Walker

5

Основной способ, которым я могу думать:

Когда пользователь первым попадает на страницу, лаг, скажем, их IP-адрес, страница загружена, и время. Затем, используя некоторые Javascript и AJAX, когда они покидают страницу, вы используете событие unload для отправки обработчику AJAX, который записывает страницу и когда она уходит.

Чтобы сохранить посещение страницы, вам нужно будет использовать какой-либо идентификатор, кроме сеанса. Скажем, у меня есть 5 экземпляров открытой страницы, поэтому вы хотите регистрировать их по отдельности. Так, что-то вроде этого:

  1. Доступ к странице, генерировать код (скажем, страница: index.php код: 2345)
  2. следует хранить в таблице базы данных с их IP и посетить время
  3. Unload событие огонь, вызовите AJAX, минуя страницу & код
  4. Посмотрите в БД для IP, страницы, и код, и регистрировать время отпуска

Если они посещают index.php снова, вы бы сгенерировали еще один код, скажем, 36789. Использовать то, что генерирует случайный GUID, лучше всего, поэтому вы можете (по существу) игнорировать любые возможности коллизий в одной и той же комбинации IP/page/code.

+1

И что вы будете делать, если в браузере Opera выгрузить событие doesn't? –

+1

@ DimaKrasun Я не понимаю, что это будет проблемой. Думал, что это было поддержано во всех браузерах, но я вообще не касался Opera. Узнавайте что-то новое каждый день. – Tarka

2

Там на самом деле не является эффективным способом сделать это с помощью PHP, поскольку PHP является серверной и не дает возможности определить, когда страница была закрыта. Для этого вам нужно использовать javascript.

Что бы я сделал, это использовать javascript для запуска таймера на window.onload, а затем завершить таймер на window.onunload. Затем вы можете хранить данные и делать с ними то, что хотите.

0

$ (window) .unload - очень хорошая функция для отслеживания пользовательской страницы.

но один пункт, когда окно выгружает, чтобы отправить ajax, когда-то он теперь работает, ajax не закончен, когда пользователь покидает страницу. поэтому вам нужно добавить один атрибут (асинхронный: false) в ajax, код - удар:

$.ajax({ 
        type: 'POST', 
        async: false, 
        url: '/collect-user-time/ajax-backend.php', 
        data: {time: time} 
       }); 
Смежные вопросы