如何使用PHP和JQuery跟踪访客,以确定页面浏览量的独特访问者



我想跟踪访问者访问我的网站。当访客到达时

最好通过cookie或通过IP地址跟踪它们?会有一个名为访问者的表,其中访问者_ID及其IP地址或cookie代码。另一个名为"访问"的表,它将每次"访问者"到达网站时,使用visit_id,visitor_id和日期/时间。

如何确定这是新访问还是另一个页面视图?即,网站上的每个页面都将具有此代码,以添加访问者,但是我不希望每次查看页面时都将其记录为新访问。

另一个想法是使用$ _server ['http_referer'],然后我可以告诉访问者不是从我的网站上进行另一个页面视图,但是我不确定这是多么可靠。

所以我想知道我们该怎么做?

最好的方法是使用IP地址和cookie的组合。仅将IP地址保存在不够的情况下,因为当用户使用代理时,它可以经常更改。对于每个页面加载,您都可以使用这样的代码

// Get IP address of user
function getUserIP() {    
  if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
  } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } else {
    $ip = $_SERVER['REMOTE_ADDR'];
  }
  return $ip;
}
// Check if cookie exists. If not then set new cookie. Return its value
function getUserCookie() {
  if(isset($_COOKIE['visited'])) {
    // cookie is already set
  } else {
    list($usec, $sec) = explode(" ", microtime()); // Micro time!
    $expire = time()+60*60*24*30; // expiration after 30 day
    setcookie("visited", "".md5("".$sec.".".$usec."")."", $expire, "/", "", "0"); 
  }
  return $_COOKIE['visited'];
}

如果没有这些值的访问者,则可以将两个值保存到数据库表访问者,因此您可以说它是唯一的新访问者。如果有这些值之一的访问者,则它正在返回访问者,因此您应该更新访问表。

,但是我认为只有一张桌子好多了,因为您不认识访客。使用单个SQL查询,您将仍然能够区分唯一的访问者,页面浏览量,访问者流动,访问时间等。

我建议使用持久的cookie存储访客信息。

跟踪返回访客

当访问者来到您的网站时,您可以检查他们是否已经在浏览器中有一个visitor_id cookie:

  • 如果他们不这样做,请为他们创建访问者ID并将其保存在cookie中,然后使用Ajax将ID发送到您的服务器并在数据库中创建新访问者。
  • 如果这样做,您可以通过Ajax查询服务器以获取以前的访问者信息,或将当前会话附加到以前的访问中。在下面的更多信息。

这样,您可以通过识别他们从中访问的浏览器来跟踪单个用户,因为这比其IP或任何其他匿名标识更稳定。

注意:您也可以纯粹使用没有AJAX的PHP的$ _COOKIE进行操作,但是我发现将客户端代码与后端完全分开更舒适。这只是个人喜好的问题。

的一些前端伪代码
if (haveVisitorCookie) {
    getVisitorDataByID(visitorCookie); //some ajax implementation
} else {
    createVisitorCookie(); //save to back-end
}

在网站上跟踪用户活动

上面的部分仅涵盖识别新/返回的访问者并持续存在的访客信息。要记录用户在一次访问中的工作,最简单的方法是使用PHP的内置会议。

您需要做的就是在代码开头调用session_start(),并为访问者分配了一个会话,该会话将保持打开状态,直到访问者保留在网站的任何页面上为止。然后,您可以使用Magic $_SESSION变量将数据添加到当前会话中。您可以以$_SESSION['key'] = value的形式存储任何数据。

例如,您可以在每个页面加载上查询当前的会话ID,如果它已经存在,则将当前操作附加到它,否则将其作为来自同一访问者的新访问。

一些后端伪代码

session_start();
if ($visitorID) { //visitorID is sent from your front-end and contains the cookie data
    $previousSession = getLastVisitorSession($visitorID);
    $currentSession = session_id();
    if ($previousSession) {
        if ($previousSession === $currentSession) {
            // New pageview on same session
        } else {
            // New session
            ...
            saveNewVisitorSession($visitorID, $currentSession)
        }
    }
}

奖励积分:您甚至可以通过加载上一次会话来帮助您的用户继续关闭的地方,以防他们没有当前的会话ID,但是有一个访问者ID,并具有以前的会话存储

希望这会有所帮助!

对不起,这并不是所有代码中最漂亮的:),但我想这可能是粗略的。

<?php
  //Step over if cookie is
  if (!isset($_COOKIE["SITE_VISITED"])) {  already set
    setcookie('SITE_VISITED', 'X');
    $db = mysqli_connect('localhost', 'bfu', '1234', 'visits');
    //Do we already have a record in the DB?
    $res = mysqli_query($db, sprintf("SELECT * FROM visits WHERE ipaddr='%s';",$_SERVER['REMOTE_ADDR']));
    if ($res === FALSE && $res->num_rows = 0) {
      //Record in DB not found, let's create one
      $res2 = mysqli_query($db, sprintf("INSERT INTO visits('ipaddr','page') VALUES ('%s','%s');",$_SERVER['REMOTE_ADDR'],$_SERVER['REQUEST_URI']));
    }
    mysqli_close($res);
  }
?>

相关内容

  • 没有找到相关文章

最新更新