页面计数器脚本。怎么了?

时间:2010-09-07 18:40:32

标签: php counter

我制作了这个脚本,在mysql数据库中添加了有关谁访问过我的网站的信息。

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;
}

问题是它多次为每个用户添加引用(但有时不是,有时候)。例如,我在我的数据库信息中找到如下:

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)
那不可能不是吗?我确定会话超过4秒:)会发生什么?

2 个答案:

答案 0 :(得分:5)

僵尸程序正在丢弃会话信息并忽略您的cookie。

这意味着它会在您的日志中多次显示。是的,它会在没有会话信息的情况下快速访问您的网站,因此您不会将其过滤掉。

您最好的选择是对机器人或IP进行某种重复过滤,以这种方式快速反复击中。您也可以尝试将显式忽略添加到导致脚本出现此问题的少数bot用户代理中。当你有10或15时,你将处理大部分问题UAs。

答案 1 :(得分:0)

在代码开头写session_start()。 (为了更清楚地说明问题)

尽管PHP中默认会话超时为1440秒。默认情况下,会话在浏览器关闭后关闭。知道应用程序日志包含机器人,很可能它正在做同样的事情。 (打开和关闭连接)