代码之家  ›  专栏  ›  技术社区  ›  Kyle

只跟踪唯一访客?

  •  15
  • Kyle  · 技术社区  · 15 年前

    目前我有一个名为“hits.php”的文件,在任何我想跟踪的页面上,我只是使用 <?php include("hits.php"); ?>

    但是,我怎样才能跟踪唯一的访客呢?我的点击率是假的,因为它可以由同一个人刷新,点击率上升。

    <?php
     $hits = file_get_contents("./client/hits.txt"); 
     $hits = $hits + 1; 
    
     $handle = fopen("./client/hits.txt", "w"); 
     fwrite($handle, $hits); 
     fclose($handle); 
    
     print $hits; 
    
    ?>
    

    我真的不知道怎么检查饼干。。。有办法检查IP吗?或者我能做什么?

    7 回复  |  直到 15 年前
        1
  •  17
  •   user372743 user372743    13 年前

    最简单的方法是cookie检查。

    更好的方法是创建一个SQL数据库,并将IP地址指定为主键。然后,每当用户访问时,您都会将该IP插入数据库。

    1. $_SESSION['logged'] 你可以分配任何你想要的“旗帜”。
    2. 如果 $会话[“已记录”] 返回“false”,然后将其IP地址插入MySQL数据库。
    3. $会话[“已记录”] 为“true”,这样就不会浪费资源多次记录IP。

    注意:创建MySQL表时,请将IP address字段指定为键。

    <?php 
      session_start();
      if (!$_SESSION['status']) {
        $connection = mysql_connect("localhost", "user", "password");
        mysql_select_db("ip_log", $connection);
    
        $ip = $_SERVER['REMOTE_ADDR'];
        mysql_query("INSERT INTO `database`.`table` (IP) VALUES ('$ip')");
    
        mysql_close($connection);
        $_SESSION['status'] = true;
      }
    ?>
    
        2
  •  3
  •   winwaed    15 年前

    目前还没有一个完美的解决方案,但是前两种方法(IP地址和/或cookies)是最可靠的,而且结合起来可能更好。

    我没有重新发明轮子,而是使用现成的解决方案。出于商业原因,我避免使用谷歌分析(我不想让谷歌知道我的网络数据——他们的最大利益不是我的)。对于非商业网站,或者如果你不使用谷歌做广告的话,他们可能会很好。还有很多选择。例如我使用Getclicky.com

        3
  •  2
  •   JAL    15 年前
    1. 在基本级别上,您可以使用PHP获取客户机的IP地址 $_SERVER['REMOTE_ADDR'] 财产
    2. setcookie 文档获取更多信息。
    3. https://panopticlick.eff.org/index.php
        4
  •  2
  •   Matt    15 年前

    如果你不能的话,谷歌分析怎么样。你可以创建一个数据库,或者创建另一个包含IPs的文件,但是像这样的平面文件会使它变得复杂。

        5
  •  1
  •   the Tin Man    13 年前

    我找到了质量很差的解决方案,而且只是一种快速而肮脏的方法。

    我也在开发类似的东西,并制定了一个快速的方法,没有多余的工作。

    伪:

    • 创建一个具有查看器名称和被访问者名称的表(daily_views table)。
    • 如果不存在,则更新用户计数器+1(在用户表中)。
    • 否则什么也不做。
    • 每24/12小时通过cron job重置整个表值为空。

    一整天(或12小时)在刷新时进行计数,而上述溶液 格伦·纳尔逊确实会在计数器上加1,但否认 每一个 同时是用户计数器。

    它只是重新添加到计数器中,在某些情况下,trolls和haxorz wannabe将利用此漏洞(会话被破坏并重新启动)。

    users 
    {
    user_id INT(8) auto increment, user_name varchar(32), user_counter INT(12)
    };
    daily_views
    {
    view_id INT(8) auto increment, viewer_name VARCHAR(32), viewee_name VARCHAR(32)
    };
    

    以下是我编写的示例代码:

    <?php
    session_start();
    $uname = $_SESSION['username'];
    $vieweepage = $_GET['name']; //gets the name of the persons page/profile via previous page/form
    $connect = mysql_connect("localhost","user","password") or die("Couldn't connect; check your mysql_connect() settings");
    $database = mysql_select_db("database") or die("Could not locate database!");
    
    $query = mysql_query("SELECT user_counter from users");
    $query = mysql_fetch_row($query);
    $counter = $query[0];
    $viewcheck = mysql_query("SELECT viewer_name from daily_views WHERE viewee_name='$vieweepage'");
    $viewrow = mysql_num_rows($viewcheck);
    
    $newcounter = $counter + 1;
    
    if($viewrow == 0)
    {
    $update = mysql_query("UPDATE users SET user_counter='$newcounter' WHERE user_name='$vieweepage'");
    $insert = mysql_query("INSERT into daily_views (viewer_name, viewee_name) VALUES ('$uname', '$vieweepage')");
    }
    ?>
    
        6
  •  0
  •   Saurabh Chandra Patel cskwg    13 年前

    目前我正在使用 remote address session ID 对于访问者。我认为它是有效的访问者,因为一个用户一天内可以访问的次数不多,计数器不依赖于刷新它只依赖于新会话。

        7
  •  0
  •   Sebastian Td    7 年前

    可以在javascript中将时间戳保存到localStoage。浏览器不会删除LocalStoage,因此应该保存以进行检查。我知道这不是服务器端检查,但无论如何可能会有帮助。

    推荐文章