Как отслеживать время пользователя на сайте - PullRequest
16 голосов
/ 21 августа 2010

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

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

Ответы [ 4 ]

22 голосов
/ 21 августа 2010

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

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

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

ОБНОВЛЕНИЕ:

<!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);
}

Но, как я уже сказал, он не будет работать в браузере Opera

5 голосов
/ 21 августа 2010

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

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

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

  1. Получите доступ к странице, сгенерируйте код (скажем, page: index.php code: 2345)
  2. Сохраните это в таблице базы данных с ихIP-адрес и время посещения
  3. Разгрузка события, вызов AJAX, передача страницы и кода
  4. Поиск в базе данных IP-адреса, страницы и кода, а также запись времени выхода

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

2 голосов
/ 21 августа 2010

На самом деле не существует эффективного способа сделать это с помощью PHP, так как PHP на стороне сервера и не позволяет определить, когда страница была закрыта. Вы должны использовать JavaScript, чтобы определить это.

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

0 голосов
/ 15 декабря 2017

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

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

$.ajax({
                  type: 'POST',
                  async: false,
                  url: '/collect-user-time/ajax-backend.php',
                  data: {time: time}
              });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...