2010-09-07 4 views
1

J'ai fait ce script qui ajoute dans une base de données mysql des informations sur qui a visité mon site.Script de compteur de page. Qu'est-ce qui ne va pas?

session_start() 

if(!isset($_SESSION['log'])) { 
    $ip=$_SERVER['REMOTE_ADDR']; 
    $date=date("Y-m-d H:i:s"); 
    $browser=$_SERVER['HTTP_USER_AGENT']; 
    $browser=mysql_real_escape_string($browser); 
    if(isset($_SESSION['nickname'])) { 
     $user=$_SESSION['nickname']; 
    } else { 
     $user="unknownABCD1234"; 
    } 
    $insert=mysql_query("INSERT INTO views (ip, user, date, browser) VALUES ('$ip', '$user', '$date', '$browser')", $mydb); 
    $_SESSION['log']='logged'; 
    $_SESSION['iplog']=$ip; 
    $_SESSION['datelog']=$date; 
} 

le problème est qu'il ajoute la référence pour chaque utilisateur plusieurs fois (mais pas toujours, parfois). par exemple, je trouve sur mes infos db comme ceux-ci:

ID: 1 
IP : 95.108.244.252 
USER : unknownABCD1234 
DATE : 2010-08-07 01:16:00 
BROWSER : Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) 

ID : 2 
IP : 95.108.244.252 
USER : unknownABCD1234 
DATE : 2010-08-07 01:16:04 
BROWSER : Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) 

c'est impossible non? je suis sûr que la session pendant plus de 4 secondes :) que se passe-t-il?

Répondre

5

Le bot est de jeter info session et ignorer vos cookies.

Cela signifie qu'il apparaît plusieurs fois dans votre journal. Oui, il arrive sur votre site rapidement et sans information de session, donc vous ne le filtrez pas.

Votre meilleure option est d'avoir une sorte de filtre en double pour les bots ou les IP qui frappent rapidement et de manière répétée de cette façon. Vous pouvez également essayer d'ajouter des ignorés explicites aux quelques agents utilisateurs de bot qui provoquent ce problème avec votre script. Au moment où vous avez 10 ou 15, vous aurez traité avec la majorité des UAs de problème.

+0

Bot? Quel bot? Dunno ce que vous dites :) cet exemple est quand j'essaye d'ajouter sur mon site Web (moi, pas un bot). Il ignore la variable $ _SESSION ['log'] o_O – markzzz

+0

@markzzz Yandex ** Bot ** du journal que vous avez fourni. –

+0

Non, ils ne sont pas vous. YandexBot est une araignée de moteur de recherche russe. –

0

Écrivez session_start() au début du code. (Pour plus de clarté dans la question)

Bien que le délai d'attente de session par défaut soit de 1440 secondes en PHP. Par défaut, la session se ferme après l'arrêt du navigateur. Sachant que le journal des applications contient un bot, il est probable qu'il fasse la même chose. (Ouvrir et fermer les connexions)

+0

hehe oui bien sûr, que seule une partie de ma page, juste la partie où je mets les informations sur l'utilisateur. – markzzz