Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [solved] Licznik odwiedzin oparty o sesję
Forum PHP.pl > Forum > PHP
Blackhole
Cześć.
Mam własny licznik odwiedzin oparty o sesje i zapisujący IP do bazy danych.
Początek index.php:
  1. <?php
  2. include "pv.php";
  3. ?>
  4. <html>
  5. <!-- dalsza część strony -->
a plik pv.php zawiera:
  1. <?
  2. if (!isset($_SESSION['pv'])) {
  3. // tutaj zapisuję IP do bazy
  4. // (...)
  5. $_SESSION['pv'] = 1;
  6. }
  7. ?>
Gdy zobaczę jakie IP zapisały się w bazie, to mam np.:
  1. dzień_miesiąca godzina - IP (domena)
  2. 01 07:45:11 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  3. 01 07:45:07 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  4. 01 07:08:42 - 78.133.167.251 (mail.gazoprojekt.com.pl)
  5. 01 04:47:46 - 88.135.165.153 (klient-88-135-165-153.StrefaWiFi.kolnet.eu)
  6. 01 04:36:12 - 66.249.74.100 (crawl-66-249-74-100.googlebot.com)
  7. 01 02:33:39 - 66.249.74.100 (crawl-66-249-74-100.googlebot.com)
  8. 01 01:46:39 - 208.115.113.88 (208.115.113.88)
  9. 01 01:46:34 - 208.115.113.88 (208.115.113.88)
  10. 01 01:12:29 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  11. 01 01:04:42 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  12. 01 01:04:39 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  13. 01 01:04:38 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  14. 01 01:04:35 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  15. 01 01:04:32 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  16. 01 01:04:29 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  17. 01 01:04:28 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  18. 01 01:04:26 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  19. 01 01:04:22 - 65.55.213.73 (msnbot-65-55-213-73.search.msn.com)
  20. 01 00:44:30 - 83.4.104.155 (aaea155.neoplus.adsl.tpnet.pl)
  21. 28 23:56:12 - 180.215.53.133 (180.215.53.133)
  22. 28 23:55:52 - 180.215.53.133 (180.215.53.133)
Widać, że boty nic sobie nie robią z zabezpieczenia (na $_SESSION['pv']) przed nabijaniem licznika. Jak to jest możliwe?
StrefaPi
boty przeglądarek zachowują się jak zwykłe przeglądarki więc, to jest normalne, też otrzymują sesje itd...

dodaj w php warunek z odrzuceniem botów (w przykladzie tylko kilka popularnych nazw botów):

  1. $u_agent = $_SERVER["HTTP_USER_AGENT"];
  2.  
  3. if((strstr($u_agent, "bingbot")) || (strstr($u_agent, "msnbot")) || (strstr($u_agent, "Crawler")) || (strstr($u_agent, "Googlebot")) || (strstr($u_agent, "Slurp")) || (strstr($u_agent, "Yandex"))) {
  4. $check_bot = true;
  5. }
  6. else {
  7. $check_bot = false;
  8. }
Blackhole
Cytat(StrefaPi @ 2.03.2013, 10:21:02 ) *
boty przeglądarek zachowują się jak zwykłe przeglądarki więc, to jest normalne, też otrzymują sesje itd...
Czyli te boty za każdym razem dostają nową sesję? (dlaczego?)
markonix
Jak wyłączysz przeglądarkę i znowu wejdziesz na stronę to też przy domyślnych ustawieniach dostaniesz nową sesje.
wNogachSpisz
Skąd masz nazwę domeny? Robisz revDNS podczas zapisywania loga? smile.gif
StrefaPi
Tak, boty z reguły mają nowe sesje prawie zawsze... a czemu nie?

Boty wyszukiwarek nie pamiętają sesji lub są tak skonfigurowane, żeby je usuwać z adresów itd... tak to działa... Treść indeksowanych stron musi być jak najbardziej standardowa, bez modyfikacji i dodatków sesyjnych wink.gif
Blackhole
Cytat(wNogachSpisz @ 2.03.2013, 10:27:01 ) *
Skąd masz nazwę domeny? Robisz revDNS podczas zapisywania loga? smile.gif
W bazie zapisuję tylko IP, a wyświetlam (jak tutaj) używając funkcji PHP: gethostbyaddr


Cytat(StrefaPi @ 2.03.2013, 10:21:02 ) *
dodaj w php warunek z odrzuceniem botów (w przykladzie tylko kilka popularnych nazw botów):
  1. $u_agent = $_SERVER["HTTP_USER_AGENT"];
  2. // (...)
Wartość tego klucza z tablicy $_SERVER raczej jest tu błędnie podana, racja? Nie zawiera ona przecież hostname serwera, z którego przyszedł request.
StrefaPi
Cytat(Blackhole @ 2.03.2013, 18:29:00 ) *
Wartość tego klucza z tablicy $_SERVER raczej jest tu błędnie podana, racja? Nie zawiera ona przecież hostname serwera, z którego przyszedł request.


$_SERVER["HTTP_USER_AGENT"] jest prawidłową zmienną w tym wypadku

ale ten warunek nie dotyczy hostname serwera, ale nazwy User Agenta jakimi posługują się popularne boty wyszukiwarek (od taki trik), one zawsze podpisują się User Agentem a bardzo często wchodzą z różnych ip, które często nie mają odpowiedniego hostname...

w twoim wypadku wystarczy kod zamienić (i pozbędzisz się z licznika większości botów):
  1. ... wcześniejszy kod
  2.  
  3. if(!$check_bot) {
  4. include "pv.php";
  5. }
Blackhole
Dzięki! smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.