2013-04-27 75 views
0

我想在每个用户访问的表中只输入一个详细信息。无论他登陆哪个网页,他的访问都很重要。所以我插入这个在header.php//头文件包含在每个PHP文件。如何仅在MySql中插入访问者详细信息

//$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工作或生活,直到用户关闭选项卡。关闭标签$ retuser必须销毁!

+0

只需检查是否已存在条目? – bwoebi 2013-04-27 16:56:37

+0

你可以试试'INSERT IGNORE' – Colin747 2013-04-27 16:57:17

+0

用会话变量替换'$ retuser'怎么样? – 11684 2013-04-27 16:58:45

回答

0

当您尝试跟踪访问者时,请记住一些事情,幸运的是,您使用的是user_id,因此您不必担心跟踪临时浏览器时出现的很多问题(例如,已验证):

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

您可以拉查询来查看用户是否在一段时间内在网站上。但问题在于用户是否合法,因为他们去吃午餐或洗手间而离开浏览器,并在10分钟后回来,SESSION仍然有效。他们没有去过任何地方,事实上,如果他们打到另一页,这是你想要保留的人的类型。如果因为延迟而冲洗会议,你就会缩短潜在的跟踪时间。

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