PHP - 我自己的反击 - 麻烦

时间:2011-04-12 21:09:21

标签: php counter

我制作了自己的自定义计数器,以统计在我的网站上连接的人。这是代码:

$date=date("Y-m-d H:i:s");
$ip=$_SERVER['REMOTE_ADDR'];
$query=mysql_query("SELECT date, id FROM views WHERE ip='$ip' ORDER BY date DESC",$mydb);

if(mysql_num_rows($query)!=0){
    $id_ip=mysql_result($query,0,'id');
    $limit_time=strtotime("-20 minutes");
    $current_time=strtotime(mysql_result($query,0,'date'));
} else {
    $limit_time=$date;
    $current_time=0;
}

if(isset($_SESSION['nickname'])) {
    $user=$_SESSION['nickname'];
} else {
    $user="gtw@visitor";
}

if($current_time<$limit_time) {         
    $insert=mysql_query("INSERT INTO views (ip, user, date) VALUES ('$ip', '$user', '$date')", $mydb);
} else {
    if($user!="gtw@visitor") {
        $update=mysql_query("UPDATE views SET date='$date', user='$user' WHERE id='$id_ip'",$mydb);
    } else {
        $update=mysql_query("UPDATE views SET date='$date' WHERE id='$id_ip'",$mydb);
    }
}

问题是:如果我使用2个浏览器连接到具有相同IP(例如,同一台计算机)的网站,我将使用2个不同的用户名进行登录,它只算作单个访问者。有什么建议可以改善这种情况吗?

也许为每个连接添加一个从BROWSER AGENT生成的HASH?说不上...

3 个答案:

答案 0 :(得分:1)

正如您所注意到的,许多客户端可以共享相同的公共IP地址。

Google使用Cookie解决了这个问题。这不是万无一失的,但是你能做的最好。您可以使用此方法跟踪您网站上访问过的网页序列。

但实际上,您应该使用现成的分析软件包,例如Google Analytics

答案 1 :(得分:0)

您可以设置一个cookie并在添加到计数器之前检查是否存在,但这可能会给您一些其他问题。你可能想看一下wordpress stat计数器是如何实现的,或者,也可以去google analytics(除非你真的想要自己动手:)。)

答案 2 :(得分:0)

您可以将用户代理字符串添加到视图表,以便每次访问都包含元组(IP,日期,用户代理)。这将有助于计算来自不同浏览器的相同IP的访问,作为两次不同的访问。

您可以使用$ _SERVER ['HTTP_USER_AGENT']获取用户代理字符串。