【问题标题】:How to insert visitor detail in MySql only once如何在 MySql 中只插入一次访问者详细信息
【发布时间】:2013-04-28 01:43:59
【问题描述】:

每次用户访问时,我只想在表格中输入一个详细信息。无论他登陆哪个页面,他的访问都很重要。所以我将它插入到 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 必须被销毁!

【问题讨论】:

  • 只检查是否已经存在一个条目?
  • 你可以试试INSERT IGNORE
  • 用会话变量替换$retuser怎么样?
  • 符合这个条件吗? :用户关闭我的标签并在 5 分钟内重新打开我的标签。我想再次在我的表中添加他访问的新条目。

标签: php


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多