Создание системы учета посещений
Источник: http://www.marketer.ru/
Головин Андрей
Автор сайта
Веб-мастеринг для желающих разобраться.
http://exper.ural.ru/
У
вас может возникнуть вопрос, зачем это нужно? Свои услуги предлагают
более десятка российских и огромное множество иностранных систем
статистики. Так зачем лишний раз напрягаться, писать и отлаживать
скрипты, создавать базы и, вообще, совершать какие-либо
телодвижения, когда, потратив 10 минут, мы получим полноценную
систему статистики, которая предлагает нам, просто, безграничное
количество данных о пользователях нашего сайта?
Причин две.
Во-первых, "внешняя" система статистики создают ощутимую задержку в
загрузке страницы. Во-вторых, одному интересно узнать больше о
графической системе пользователя, другому - о версиях браузера, а
третьему - время проведенное пользователем на его сайте. Но, как
оказывается, одна система дает инормацию о графической системе,
вторая - о времени посещений, третья - вообще, не дает такой
инормации, зато наиболее точно считает количество посетителей. Что
делать? Вот и начинаем мы с вами ставить на страницу один, два, а
потом и все пять счетчиков, после чего, время загрузки полезной
информации составит не более 10% от времени загрузки сайта. Это
приведет к тому, что посетитель плюнет и уйдет (интернет-то большой)
или информации о нем не попадет в системы статистики. Вот тут-то мы
и приходим к осознанию того, что система нужна своя.
Какие
преимущества это дает? Во-первых, скорость загрузки. Цифры
статистики можно вывести текстом, что не задержит загрузку, а
обработка статистики будет производится на том же сервере, что и
страница, что не внесет дополнительных задержек на установление
связи с удаленным сервером. Во-вторых, такая система, изначально,
будет соответствовать нашим запросам. Хотим - будем учитывать
параметры графической системы пользователей, хотим - будем считать,
сколько раз пришел за последние 15 секунд Вася Пупкин. В-третьих,
так как такая система является неотъемлемой частью сайта, то не
будет потеряно ни одного хита!
Здесь я не буду приводит
конкретных скриптов, потому, что это будет очень громоздко, да и не
нужно, вы, ведь, пришли разобраться во всем этом? Я изложу только
основные принципы.
Для реализации подобной системы я
использовал слудующее программное обеспечение:
Базы
данных: mySQL
Скрипт: PHP
Вебсервер: Apache.
Сначала определимся, какие параметры мы хотим учитывать. Для
себя я считаю важным знать, сколько пользователей пришло на сайт,
сколько хитов они принесли, какие страницы посетили и откуда пришли
и время каждого хита.
Из этих данных можно вывести довольно
много статистической информации. Так что этот аскетичный набор меня
вполне устраивает. Исходя из этого, я создал три таблицы в базе
данных:
hits: Хранит подробную информацию о хитах за
текущий день. Содержит следующие поля:
Имя |
Комментарий |
host |
буквенное имя домена
пользователя |
addr |
IP адрес пользователя |
referer |
ссылка, по которой пришел
пользователь |
page |
на какую страницу сайта пришел
пользователь |
timest |
время
хита. | |
hitsbypage:
хранит инормацию за весь период по посещениям страниц сайта.
Содержит следующие поля:
Имя |
Комментарий |
page |
страница |
hits |
количество хитов |
hosts |
количество
хостов | |
referers:
хранит информацию о ссылках, по которым приходят на сайт.
Содержит следующие поля:
Имя |
Комментарий |
href |
собственно, ссылка |
hits |
количество посещений с этой
ссылки | |
hitsbydate:
хранит информацию о хитах и хостах по дням. Содержит следующие
поля:
Имя |
Комментарий |
date |
дата |
hits |
количество хитов |
hosts |
количество
хостов | |
Возникает
вопрос, откуда взять все эти данные? Вебсервер, при установлении
сеанса устанавливает определенные переменные среды, которые доступны
из скриптов на языке PHP. Прежде всего нас интересуют следующие:
Переменная |
Значение |
$REQUEST_URI |
адрес запрашиваемой страницы |
$REMOTE_HOST |
домен пользователя (если
установлен) |
$REMOTE_ADDR |
IP адрес пользователя |
$HTTP_REFERER |
Ссылка, по которой пришел
пользователь (если таковая была, т.е. пользователь не
набрал адрес сайта в браузере или выбрал из списка
избранных
сайтов) | |
Теперь
рассмотрим логику работы самой системы. Проверяем, не является ли
значение поля
$HTTP_REFERER новым (не
содержится в таблице
referers). Если новое, то
добавляем его в нужную таблицу и устанавливаем количество хитов для
него в 1. Если такая ссылка уже была, то, просто, увеличиваем
количество хитов.
Аналогичным образом проверяем адрес
запрашиваемой страницы.
Далее проверяем, были ли хиты
сегодня. Если хитов небыло, значит, начался новый день и это первое
посещение сегодня. Следовательно, удаляем все данные из таблицы
hits, так как хранить всю информацию в ней
нерентабельно. Затем вносим новую дату в таблицу
hitsbydate и устанавливаем количество хитов и хостов
для данной даты в 1. Если же новый день еще не наступил, то,
проверив, не является ли IP адрес уникальным на сегодня, увеличиваем
поля
hits и
hosts в
таблице
hitsbydate.
И, наконец,
заносим информацию в таблицу
hits.
Вот
и все. Вся необходимая информация хранится в базах на сервере и
доступна в любой момент для проведения дальнейшего статистического
анализа.
Результаты работы такой системы вы можете
посмотреть на
странице статистики
моего сервера.