Только отслеживание уникальных посетителей?

В настоящее время у меня есть файл под названием "hits.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.

Ответы

Ответ 1

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

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

  • Создайте функцию, включенную на все страницы, которые проверяют $_SESSION['logged'], которые вы можете назначить независимо от того, какой флаг вы хотите.
  • Если $_SESSION['logged'] возвращает 'false', тогда вставьте свой IP-адрес в базу данных MySQL.
  • Установите $_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;
  }
?>

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

Псевдо:

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

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

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

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

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')");
}
?>

Ответ 6

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