0

每次用户访问时,我只想在表中输入一个详细信息。无论他登陆哪个页面,他的访问都很重要。所以我将它插入到 header.php //每个 php 文件中包含的头文件中。

 //$retuser is not defined in veryfirst visit

if(!isset($retuser)){ 

    $ip=getRealIpAddr();
    if(isset($_SESSION['user_id'])) {
        $uid=$_SESSION['user_id'];
    } else {$uid=0;
    }
    $query="insert into visitors (vistime,visip,visiden) values(now(),'{$ip}','{$uid}')";
    $result = mysql_query($query,$connection);
    if (!$result) {
        echo "DB Error, could not insert comments\n";
        echo 'MySQL Error: ' . mysql_error();
        exit;
    }
    $retuser=1;
}

现在这是在每次重新加载页面时插入用户条目。如何解决这个问题?

更新 :

我希望 $retuser 工作或生活,直到用户关闭他的标签。关闭选项卡后,$retuser 必须被销毁!

4

1 回答 1

0

当您尝试跟踪访问者时要记住几件事,幸运的是您使用的是 user_id,因此您不必担心跟踪休闲浏览器(未经身份验证)时出现的许多问题:

  1. 当用户在浏览器中关闭选项卡或窗口时,会话*应该*并且通常会关闭。用户可以通过在浏览器中长时间打开选项卡来保持会话打开。
  2. 您正在设置一个 user_id,但您需要存储 session_id。这将帮助您确定他们是否使用相同的浏览器,或者他们是否在每个页面上都关闭了浏览器(对于像 cURL 这样的机器人来说是这样的)。您是否希望他们在两个不同的浏览器之间有两个打开的登录会话?网站需要有多安全?
  3. 即使用户没有关闭浏览器,他们也可能看起来来自多个 IP。这是通过蜂窝网络(移动访问者)和互联网代理池设计的。来自两个不同塔的同一用户可以在移动设备上的单个会话期间多次切换 IP。僵尸网络也有这种行为,但从技术上讲,它们不是您要跟踪的用户,除非您试图阻止它们。
  4. 多个用户可以来自一个 IP 地址。这发生在本地网络上。本地网络上的两个人使用不同的本地 IP 地址,一个公共 Web IP 地址(通常是网关、路由器或调制解调器之类的东西)。从技术上讲,尝试在本地计算机的 NIC 上捕获他们的 MAC 地址是可行的,但它并非在所有情况下都有效(如果他们收到有关浏览器权限或不安全站点的警告,这将显得具有侵略性)。我现在有 5 台机器在我的本地网络上运行,我会经常打开一个包含所有 5 台机器的页面进行测试。即使我是同一个用户,这也使它看起来像更多的流量。如果一个站点阻止了我的多个会话,我通常会为每台机器创建新帐户。(我必须在我的网站上做一些“测试”
  5. 如果用户在同一台​​计算机上使用多个浏览器进行浏览,则他们可能会同时打开多个会话。

您可以拉取查询以查看用户是否在一定时间内访问过该网站。然而问题是,如果用户是合法的,因为他们去吃午饭或去洗手间而让他们的浏览器保持打开状态并在 10 分钟后回来,那SESSION仍然是活动的。他们没有去任何地方,事实上,如果他们点击另一页,这就是您想要保留的人的类型。如果您因为延迟而刷新他们的会话,那么您就是在缩短自己的潜在轨道。

您可以使用 Javascript 组件来跟踪他们最后一次移动鼠标或离开您的页面的时间,但如果听众很贪婪,它可能会使您的网站看起来更慢。此外,有人可以禁用 Javascript 或阻止您的脚本,但仍然可以合法地浏览您的网站。

于 2013-04-27T17:36:26.070 回答