Отслеживание только уникальных посетителей? - PullRequest
15 голосов
/ 23 октября 2010

В настоящее время у меня есть файл с именем "hit.php", и на любой странице, которую я хочу отслеживать хиты страницы, я просто использую <?php include("hits.php"); ?>

Как я могу отслеживать только уникальных посетителей?Мои хиты являются ложными, поскольку они могут обновляться одним и тем же человеком, и хиты увеличиваются.

Вот мой источник:

<?php
 $hits = file_get_contents("./client/hits.txt"); 
 $hits = $hits + 1; 

 $handle = fopen("./client/hits.txt", "w"); 
 fwrite($handle, $hits); 
 fclose($handle); 

 print $hits; 

?>

Я действительно не знаю, как я могу выполнить проверку файлов cookie... есть ли способ проверить IP?Или что я могу сделать?

Спасибо StackO.

Ответы [ 7 ]

17 голосов
/ 23 октября 2010

Самый простой способ - проверка cookie.

Лучшим способом было бы создать базу данных SQL и назначить IP-адрес в качестве первичного ключа.Затем всякий раз, когда пользователь посещает, вы вставляете этот IP-адрес в базу данных.

  1. Создайте функцию, включенную на всех страницах, которая проверяет $_SESSION['logged'], которую вы можете назначить любому «флажку», который вы хотите.
  2. Если $_SESSION['logged'] возвращает «false», вставьте их IP-адрес в базу данных MySQL.
  3. Установите $_SESSION['logged'] в «true», чтобы не тратить ресурсы на регистрацию IP несколько раз.

Примечание. При создании таблицы MySQL назначьте поле IP-адреса в качестве ключа.

<?php 
  session_start();
  if (!$_SESSION['status']) {
    $connection = mysql_connect("localhost", "user", "password");
    mysql_select_db("ip_log", $connection);

    $ip = $_SERVER['REMOTE_ADDR'];
    mysql_query("INSERT INTO `database`.`table` (IP) VALUES ('$ip')");

    mysql_close($connection);
    $_SESSION['status'] = true;
  }
?>
3 голосов
/ 23 октября 2010

Не существует идеального решения, но первые два метода (IP-адрес и / или файлы cookie) являются наиболее надежными, и комбинация может быть даже лучше.

Вместо того, чтобы изобретать велосипед, я использовал готовое решение. По коммерческим причинам я избегал Google Analytics (я не хочу, чтобы Google знал мою веб-статистику - их интересы не мои). Они, вероятно, хороши для некоммерческих веб-сайтов, или если вы не используете Google для рекламы. Есть также десятки альтернатив. Например, я использую Getclicky.com

2 голосов
/ 23 октября 2010

Как насчет Google Analytics, если вы не можете.Вы можете создать базу данных или создать другой файл с IP-адресами, но с таким простым файлом все может сложиться.

2 голосов
/ 23 октября 2010
  1. На базовом уровне вы можете получить IP-адрес клиента с помощью свойства PHP $_SERVER['REMOTE_ADDR']
  2. Рассмотрите возможность установки cookie-файла или использования сеанса, хотя это можно предотвратить, удалив cookie-файл или отклонив cookie-файл. См. PHP setcookie документы для получения дополнительной информации.
  3. Существуют и другие методы снятия отпечатков в браузере - посмотрите все различные данные, которые вы могли бы использовать на https://panopticlick.eff.org/index.php
1 голос
/ 08 августа 2012

Я нашел решение очень низкого качества и просто быстрый и грязный способ сделать это.

Я тоже разработал нечто подобное и сформулировал быстрый метод, который работает без избыточности.

Мне нужен был счетчик для каждого доступа к профилю другого пользователя.

Псевдо:

  • Создать таблицу с именем зрителя и именем зрителя (таблица daily_views).
  • Проверьте, существует ли имя зрителя с именем зрителя (в той же строке).
  • Если они не существуют, обновите счетчик пользователей +1 (в таблице пользователей).
  • Иначе сделайтеНичего.
  • Сбрасывает все значения таблицы null каждые 24/12 часа с помощью задания cron.

Это запретит тому же лицу, имеющему доступ к тому же профилю пользователя, добавлять 1 к счетчику при обновлении.на весь день (или 12 часов), в то время как вышеупомянутое решение Гленна Нельсона действительно добавит 1 к счетчику, но запретит добавление к каждому счетчику пользователя одновременно.

Не толькоэтот, но если вы выйдете из системы и снова войдете на веб-сайт, он просто снова добавит к счетчику, в котором в некоторых случаях это будут использовать тролли и хакшорские подражатели (поскольку сеанс уничтожается и начинается снова).

Вот мои примеры таблиц:

users 
{
user_id INT(8) auto increment, user_name varchar(32), user_counter INT(12)
};
daily_views
{
view_id INT(8) auto increment, viewer_name VARCHAR(32), viewee_name VARCHAR(32)
};

Вот пример кода, который я написал:

<?php
session_start();
$uname = $_SESSION['username'];
$vieweepage = $_GET['name']; //gets the name of the persons page/profile via previous page/form
$connect = mysql_connect("localhost","user","password") or die("Couldn't connect; check your mysql_connect() settings");
$database = mysql_select_db("database") or die("Could not locate database!");

$query = mysql_query("SELECT user_counter from users");
$query = mysql_fetch_row($query);
$counter = $query[0];
$viewcheck = mysql_query("SELECT viewer_name from daily_views WHERE viewee_name='$vieweepage'");
$viewrow = mysql_num_rows($viewcheck);

$newcounter = $counter + 1;

if($viewrow == 0)
{
$update = mysql_query("UPDATE users SET user_counter='$newcounter' WHERE user_name='$vieweepage'");
$insert = mysql_query("INSERT into daily_views (viewer_name, viewee_name) VALUES ('$uname', '$vieweepage')");
}
?>
0 голосов
/ 27 февраля 2019

Вы можете сохранить метку времени в localStoage в javascript.LocalStoage не удаляется браузером, поэтому вы должны сохранить, чтобы проверить это.Я знаю, что это не проверка на стороне сервера, но она может быть полезна в любом случае.

0 голосов
/ 11 июня 2013

в настоящее время я использую remote address и session ID для посетителя. Я думаю, что его действительный посетитель, потому что один пользователь может посещать не раз в день, а счетчик не зависит от обновления, он зависит только от нового сеанса.

...