Назад | Перейти на главную страницу

Как я могу заставить Apache регистрировать все запросы от одного посещения с одним и тем же идентификатором?

Зачем? В настоящее время я покупаю трафик из Adwords на свой сайт электронной коммерции. В Adwords я вижу, сколько посещения Я купил и пытаюсь проверить количество посещений моего сайта, анализируя access_log Apache.

Обратите внимание, что у меня установлена ​​Mixpanel, и она сообщает намного меньшее число.

Итак, я попытался установить Apache mod_unique_id. Я добавил его в свой access_log и попытался посетить первую страницу своего сайта (страницу WordPress). Это журнал:

W2P5AswfRANRW1uZBgVINAAAAAA 50.74.231.163 - - [03/Aug/2018:06:41:06 +0000] "GET / HTTP/1.1" 200 15571
W2P5A8wfRANRW1uZBgVINQAAAAE 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/plugins/LayerSlider/static/layerslider/css/layerslider.css?ver=6.7.1 HTTP/1.1" 200 3876
W2P5A8wfRANRW1uZBgVINgAAAAM 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/plugins/contact-form-7/includes/css/styles.css?ver=5.0.1 HTTP/1.1" 200 656
W2P5A8wfRANRW1uZBgVINwAAADw 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/themes/themextend/css/magnific-popup.css?ver=4.9.5 HTTP/1.1" 200 1816
W2P5A8wfRANRW1uZBgVIOAAAADI 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/themes/themextend/css/animate.css?ver=4.9.5 HTTP/1.1" 200 4348
W2P5A8wfRANRW1uZBgVIOQAAACY 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/themes/themextend/css/theme-style.css?ver=4.9.5 HTTP/1.1" 200 3035
W2P5A8wfRANRW1uZBgVIOgAAABI 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/themes/themextend/style.css?ver=4.9.5 HTTP/1.1" 200 2136
W2P5A8wfRANRW1uZBgVIOwAAACQ 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/plugins/kingcomposer/includes/frontend/vendors/owl-carousel/owl.theme.css?ver=2.6.17 HTTP/1.1" 200 658
W2P5BMwfRANRW1uZBgVIPAAAADE 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/plugins/kingcomposer/includes/frontend/vendors/owl-carousel/owl.carousel.css?ver=2.6.17 HTTP/1.1" 200 528
W2P5BMwfRANRW1uZBgVIPQAAACU 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/slick.css?ver=4.9.5 HTTP/1.1" 200 557
W2P5BMwfRANRW1uZBgVIPgAAAC0 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/owl.carousel.min.css?ver=4.9.5 HTTP/1.1" 200 912
W2P5BJARzZ5ERwnzv6rD5gAAAIs 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/meanmenu.min.css?ver=4.9.5 HTTP/1.1" 200 682
W2P5BNIyikkB8rhsjsyUkQAAAMw 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/theme-default.css?ver=4.9.5 HTTP/1.1" 200 2643
W2P5BISOELTKgpmuElDYuQAAAEI 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/blog-post.css?ver=4.9.5 HTTP/1.1" 200 4773

Как вы видете:

  1. Все, что указано выше, есть 1 визит
  2. mod_unique_id генерирует уникальный идентификатор для каждый веб-запрос. Html моей главной страницы включает> 30 ресурсов, таких как CSS и изображения, размещенные локально.
  3. Отметка времени для каждого запроса выше жестяная банка будь другим.
  4. Может быть несколько посещений одновременно (IP будет другим)

Как я могу настроить Apache, чтобы я мог подсчитывать каждый посещение на мой сайт правильно?

С отслеживанием на стороне клиента, файлами cookie и т. Д. Помните, что большинство адресов IPv4 находятся за NAT, поэтому на один адрес может быть несколько пользователей.

Одна из реализаций httpd: mod_usertrack.

Если вы используете Google, вы можете получить Аналитика вместе с вашей рекламой.

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

<?php
    /*
     * generateRandomString() is used to generate the ID, taken from 
     * https://stackoverflow.com/questions/4356289/php-random-string-generator/4356295#4356295
     */
    function generateRandomString($length = 10) {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
             $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }

// Will generate an ID 12 characters long.
    setcookie("visit", generateRandomString(12));
?>

Затем положите %{visit}C в LogFormat запись вместо идентификатора, который mod_unique_id генерировал. Это работает путем установки файла cookie с идентификатором каждый раз, когда клиент посещает реальную страницу, и этот файл cookie будет отображаться в журнале вместо %{visit}C при каждом посещении. Когда я писал этот ответ, я собирался использовать Переменная сеанса PHP вместо этого, но не мог найти способ включить это в файл журнала Apache.


Это более простое решение, которое я написал до создания сценария PHP и не хотел удалять. Это решение не отвечает на ваш вопрос так же точно, как другое, но вы (или кто-то еще, кто это читает) можете найти его полезным.

Вы можете записывать запросы ресурсов в другой журнал, чтобы в основном журнале отображались только посещения страниц (и роботы). Следующий код проверяет, содержит ли URL просто .css или .jpg (при необходимости добавьте или удалите собственные расширения) в разделе VirtualHost конфигурации вашего сайта:

SetEnvIf Request_URI /.css/ assets
SetEnvIf Request_URI /.jpg/ assets

Для записи «посещений» добавьте env=!assets на ваш CustomLog запись: CustomLog /path/to/visit/log <logformat identifier> env=!assets

Для записи активов, как указано в списке: CustomLog /path/to/asset/log <logformat identifier> env=assets