Создание системы учета посещений
У вас может возникнуть вопрос, зачем это нужно? Свои услуги
предлагают более десятка российских и огромное множество иностранных
систем статистики. Так зачем лишний раз напрягаться, писать и
отлаживать скрипты, создавать базы и, вообще, совершать какие-либо
телодвижения, когда, потратив 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.
Вот
и все. Вся необходимая информация хранится в базах на сервере и
доступна в любой момент для проведения дальнейшего статистического
анализа.
Результаты работы такой системы вы можете
посмотреть на странице статистики моего сервера.
Автор: Головин
Андрей
|