如何在MySql中只插入一次访问者详细信息


How to insert visitor detail in MySql only once

我想在每个用户访问的表中只输入一个详细信息。不管他在哪个页面登陆,他的访问都是有价值的。所以我把它插入到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;
}

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

UPDATE:

我想$retuser工作或生活,直到用户关闭他的标签。tab $关闭后,reuser必须销毁!

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

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

你可以提取一个查询来查看用户是否在一定时间内访问过该站点。但问题是,如果用户是合法的,因为去吃午饭或上厕所而让浏览器开着,10分钟后回来,那么SESSION仍然是活跃的。他们什么都没做,事实上,如果他们翻开了另一页,这就是你想要留住的人。如果你因为延迟而刷新他们的会话,你就会失去潜在的轨道。

您可以使用Javascript组件来跟踪他们上次移动鼠标或带焦点离开您的页面的时间,但如果侦听器贪婪,可能会使您的站点显得较慢。此外,有人可以禁用Javascript或阻止你的脚本,仍然合法地浏览你的网站。