Определение кол-ва визитов на сайт с определенного ip по логу

Dave

Новичок
Определение кол-ва визитов на сайт с определенного ip по логу

Приветствую!
Такой вопрос:
анализируя лог,
как правильно определить сколько раз заходили на сайт с определенного ip ?
человек зашел сегодня , наследил в логе, ушел с сайта. Затем на следующий день(или чере n дней) снова зашел, наследил в логе и ушел.
Вот как определить что этот человек(ip) заходил на сайт 2 раза ?
Может анализировать дату захода?
а если быть точнее то дату и время, ведь можно несколько раз за день зайти на один и тот же сайт.

Данные из лога я засовываю в бд и далее генерирую уже нужные репорты.
 

Dave

Новичок
нет, это не то. так мы просто посчитаем сколько он оставил записей в логе. Это сработало бы если бы за 1 посещение на сайт оставлялась 1 запись в логе. А так, человек, может 5 минут бродить по сайту и оставлять за собой записи,затем уйти, например он оставил 15 записей, думаю, было бы неправильно сказать что он заходил 15 раз.
Человек может зайти 1 раз но оставить несколько записей, вот в чем проблема.

Я посмотрел какую выводит статистику Web trends log analyzer.
вот он пишет:
ip:217.144.68.98 hits: 1,889 visits:25

мне нужно подсчитать visits, а делая SELECT COUNT(*), IP FROM `stat` GROUP BY IP , мы подсчитаем hits.
 

Nirva

Dmitry Polyakov
хиты хранииь отдельно, в базу писать только заходы, соответвенно hits++ уже существующей записи. енсли понадобится время каждого хита (или еще что-то) выносим в отдельную таблицу и привязываем по айди к айпи, пнятна?
 

Dave

Новичок
это если бы заходы логгировал я.
а так я просто беру апачевский лог файл , разбираю его на куски и засовываю в базу. все что у меня есть - это лог файл.
 

Nirva

Dmitry Polyakov
а в базу его кто засовывает? или я сказал что-то о логировании? а пропарсить слабо? а свой лог написать слабо?
 

Nirva

Dmitry Polyakov
по реферу

-~{}~ 26.07.04 19:29:

ну и визит сам по себе хит конечно
 

Dave

Новичок
Ты имеешь ввиду: HTTP_REFERER ?
но ведь он пишет текущую страницу на которой находится пользователь. как это может помочь ? просвети, плз.
не пойму.
 

Nirva

Dmitry Polyakov
во-первых самому лог было бы удобнее вести, во-вторых написать это не сложно.
но если ты уперты - пару строчек лога своего кинь.
 

Dave

Новичок
лог сам вести не могу. я хочу написать лог аналайзер, чтобы просто отдать ему любой лог а скрипт обработал его и вывел потом все что мне нужно. Знаю что есть куча готовых лог-аналайзеров но мне интересно самому написать.
вот пример лога:
145.53.38.239 - - [01/Mar/2004:07:21:55 -0500] "GET /client/statistics.php?type=access HTTP/1.1" 302 5 "http://www.sitevalley.com/client/domain.php?domain_id=654" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
68.38.131.108 - - [01/Mar/2004:07:27:18 -0500] "GET /inc/valley.css HTTP/1.1" 200 2421 "http://www.ebay-shopee.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
68.38.131.108 - - [01/Mar/2004:07:27:18 -0500] "GET /img/box-right.gif HTTP/1.1" 200 2543 "http://www.ebay-shopee.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
68.38.131.108 - - [01/Mar/2004:07:27:18 -0500] "GET /img/b/home_controlpanel.gif HTTP/1.1" 200 820 "http://www.ebay-shopee.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
65.93.2.19 - - [01/Mar/2004:07:38:00 -0500] "GET /?refid=30 HTTP/1.1" 200 11830 "http://broncograveyard.com/cgi-bin/readers.cgi?action=searchsubmit&searchcategory=1966+to+77+Early+Bronco&type=standard" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
81.56.56.81 - - [01/Mar/2004:07:39:48 -0500] "GET / HTTP/1.1" 200 11826 "http://www.topsearchdog.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
81.56.56.81 - - [01/Mar/2004:07:39:49 -0500] "GET /inc/valley.css HTTP/1.1" 200 2421 "http://www.sitevalley.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"

как видишь, логгируются посещения с разных сайтов. при обработке лога меня интересуют строки только с нужного сайта, если строка в логе нужная то беру из нее данные и засовываю в базе если нет то переход на следующую строку.
ну для этого, перед обработкой лога ввожу еще имя нужного сайта.
вот"с
 

lucas

Guest
HTTP_REFERER ?
но ведь он пишет текущую страницу на которой находится пользователь
В HTTP_REFERER указан адрес страницы, с которой пользователь мог попасть на текущую, не более.
 

Igorek2003

Guest
После того как ты обработал лог и занес данные в базу - можно сделать следующее:
Каждому хиту будет соответствовать запись в базе, т.е. кол-во хитов всего посчитать не сложно.
Если делаешь запрос типа "SELECT count(*) FROM table_name WHERE ip='ip_name' ", то получаешь кол-во хитов для данного айпишника за все время. Если надо за определенный промежуток времени, то добавляешь "AND (access_date>'start_date')AND(access_date<'fin_date')".

Это было самое простое. Теперь по кол-ву визитов.
Считать можно по-разному. Нужно опредилить промежуток времени который будет определять посетителя на сайте. К примеру если, время между двумя записями в базе для одного айпишника больше 30 минут или больше часа(как нравится), то считать, это вторым визитом посетителя.

Этот метод не претендует на уникальность. Однако я бы делал так.
P.S. принимаю критические замечания
 

Dave

Новичок
о визитах. я так и думал что по времени придется сравнивать.

а на sql это можно реализовать, подскажите?
 

Igorek2003

Guest
на sql это можно реализовать
Если ты про то как определить разность двух переменных типа TIME, то можно сделать это так:
PHP:
SELECT TIME_TO_SEC('22:23:00')-TIME_TO_SEC('21:23:00')
//                Результат: 3600
Результат сравниваешь с необходимым числом(в данном случае 3600 - один час), если больше, то юзверь заходит второй раз.

Остальное думай сам.
 

IL78

Guest
если, время между двумя записями в базе для одного айпишника больше 30 минут... считать, это вторым визитом
А как же визиты от юзеров, сидящих за прокси?

Неужели от проверки реферера нужно отказаться вообще? По идее, если реферер с того же сайта - почти однозначно это не новый визит; реферер пуст или с другого сайта - вероятно, все-таки новый визит.

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

Если мое представление в корне неверно, прошу меня извинить. Я всего лишь хочу докопаться до истины.
 

Cid

...двинутый новичок
Вот как определить что этот человек(ip) заходил на сайт 2 раза ?
Вот! Ключевой момент - человек, или IP ? Если человек, то нужно обсчитывать хосты (точнее, браузеры), и лог веб-сервера тут не поможет. А если IP - то необходимо иметь ввиду, что существует NAT и/или прозрачные прокси, IP-masqurading и т.п., т.е. реально засчитывая IP в день в качестве уникального визита, ты можешь под видом одного такого "визита" собрать целую группу корпоративных пользователей, например.
 

Igorek2003

Guest
Иными словами напрашивается вывод, что имея стандартный лог файл получаем стандартную неверную статистику, однако, я считаю, что в большинстве случаев такого подхода будет вполне достаточно.
А если надо сделать более менее точную статистику то применяй куки, хотя, в куки можно изменять, а использование запрещать.
А если надо сделать 100% точную статистику то...
 

Dave

Новичок
дааа, народ, оказалось не все так просто.
1 запись в логе != 1 хит :( блин, как я раньше не догадался.
если на страничке где находится чел есть 5 картинок то будет 5 записей в логе...1 скачиваемый объект - 1 строка.
сколько объектов настранице - столько строк за 1 заход на страницу. я жутко обломался сегодня из этого :(((
 
Сверху