Для начала, определим, откуда можно узнать что-то о посетителе вашего сайта? Дело в том, что при соединении с сервером, браузер посылает много информации о себе в заголовках. Промежуточные компьютеры между вашим, и конечным сервером, могут дописывать свои заголовки. В результате, до вашего скрипта доходит солидное количество информации о вас и о том, как вы получили доступ к сайту.
Как же изъять эти данные, чтобы знать о своих посетителях больше? Я хочу рассмотреть решение этой проблемы на языках Perl и php. Для начала, рассмотрим их на Perl. Нетерпеливые php-шники, вам тоже будет полезно почитать эту часть статьи. Хотя, если вам нужно решение, и побыстрее, то переходите к вашей части.
Итак, начнем. Сервер получил заголовки, которые пришли к нему, вместе с клиентским запросом. Куда же он их девает? Как получить к ним доступ? Все просто. Эти данные сервер хранит в своих переменных, которые называются "переменные окружения". В Perl, доступ к ним осуществляется через хэш %ENV, ключами которого являются имена заголовков, а значениями — переданные данные.
Чтобы посмотреть все переменные окружения, достаточно выполнить простой идеоматический код:
print "$_ = $ENV{$_}<br/>" foreach(keys %ENV);
Какие из этих переменных будут нам полезны? В принципе, вы можете собирать хоть все. Но разумнее было бы собирать лишь то, что нужно. Предлагаю собирать это:
$ip = $ENV{REMOTE_ADDR}; #IP-адрес вашего посетителя
#адрес страницы, на которой посетитель щелкнул по ссылке, ведущей на ваш сайт
#если он перешел на ваш сайт из закладок, или набрав адрес в адресной строке
#значение этой переменной, будет пустым
#если был переход с поисковой системы, эта переменная будет содержать поисковый запрос
$referer = $ENV{HTTP_REFERER};
$client = $ENV{HTTP_USER_AGENT}; #название браузера вашего посетителя.
#адрес страницы, на которую пришел ваш посетитель
#вы можете узнать на какие страницы вашего сайта приходят чаще
$page = $ENV{REQUEST_URI};
Вот так. Пользуйтесь)
В php, дело обстоит похожим образом. Здесь тоже присутствует структура, хранящая данные о переменных окружения. Это ассоциативный массив $_SERVER.
Получим те же данные, но средствами php.
$ip = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['HTTP_REFERER'];
$client = $_SERVER['HTTP_USER_AGENT'];
$page = $_SERVER[REQUEST_URI];
Выведем все данные:
foreach($_SERVER as $k=>$v) {print("$k = $v<br/>")}
Некоторые пользователи сидят в интернете через прокси-серверы. В этом случае, неплохо было бы получить еще адрес прокси-сервера. Хорошие прокси посылают данные об IP своего клиента. Есть анонимные прокси, которые вырезают эту информацию из заголовков. В этом случае, получится узнать только адрес самого прокси-сервера.
HTTP_X_FORWARDED_FOR — ip-адрес пользователя, предоставляемый прокси-сервером
HTTP_VIA — имя прокси-сервера
REMOTE_ADDR — ip-адрес самого прокси-сервера
Мы получили ip пользователя. И что с того? Эта информация нам ни о чем не говорит. Как же получить информацию о пользователе, если у нас есть его ip?
Можно воспользоваться службой whois. Вводим ip-адрес и получаем кучку информации. Мы можем узнать город, в котором живет обладатель этого ip, адреса. Иногда, даже точный адрес и e-mail! Мы, почти наверняка, узнаем провайдера обладателя этого IP.
Служба whois хранит и предоставляет информацию, в нестандартизированном формате. Это значит, что разные службы могут предоставлять несколько разную информацию.
Прежде, чем начинать следить за всеми перемещениями пользователей по вашему сайту, вгоняя их в паранойю, подумайте, а что бы вы хотели знать о своих пользователях? Нужна ли вам информация о том, какие страницы сайта они посещали? Готовы ли вы пожертвовать серверной мощностью и пространством для хранения этих данных, ради того, чтобы собрать полную статистику?
Лично я, на этом сайте, использую систему сбора статистики. Она нужна только для того, чтобы узнавать откуда ко мне приходили посетители, какие поисковые запросы они вбивали. Поэтому, я записываю только тех посетителей, чей referer не пуст и не содержит адрес этого сайта.
Я могу оценивать, какие темы интересны людям, а какие — не очень. Скажем, на статью про docx, регулярно заходят с гугла и яндекса. Значит, эта информация нужна людям. Проанализировав запросы, по которым заходят на эту статью, я понял, что не совсем удовлетворяю ожиданиям пользователей. Это заставило меня дописать несколько строк к статье, что придало ей законченности. Теперь пользователи уходят довольными.
Используйте слежку за пользователем с умом! Пусть полученные данные ведут к улучшению ресурса. Доброй охоты!
Если вам понравилась статья, можете подписаться на RSS этого блога и всегда быть в курсе обновлений. А еще, вы можете подписаться на рассылку новостей блога по почте.
О том, что такое RSS и как оно облегчает жизнь, я уже писал.