Здравствуйте. Помогите пожалуйста разобраться как правильно исключить повторный подсчет количества просмотров статьи и связать его с данным решением http://bloggood.ru/wordpress/kak-vyvesti-populyarnye-zapisi-na-wordpress-bez-plagina.html/ Вар. №1 связать cookie и счетчик просмотров Как сделать проверку?Если cookies нет, тогда вызвать wpb_set_post_views(get_the_ID());, потом устанавить куки. Но так по многим причинам не рекомендуют делать https://ru.stackoverflow.com/questions/454939/Счетчик-уникальных-просмотров-через-cookie Вар. №2?
Если пользователь зареган, то отследить перешёл ли он на новость по ссылке, если перешёл, то в базу добавить, что он эту новость просмотрел, при повторном просмотре, проверить, нету ли в базе записи.
Прочитав различные статьи много всего пишут, я пытаюсь разобраться какое решение более простое и как его связать с приведенным кодом. Читал http://www.cyberforum.ru/php-beginners/thread1626274.html, но еще больше вопросов. --- Добавлено --- Dimon2x, спасибо!А если не делать регистрацию пользователей? Также прочитал такой ответ, но не совсем понимаю подходит ли для моего случая - "Можно использовать сессии. В этом случае у юзера хранится только кука с уникальным идентификатором, а вся остальная информация (массив просмотренных страниц и остальное) - на веб-сервере. И запись статистики получается довольно простая: if(!isset($_SESSION[$_GET['id']])) // если юзер перешёл на страницу site.ru?id=x, где x - номер страницы, и на такую страницу он не заходил ранее { mysql_query('INSERT/UPDATE ...'); // +1 к просмотрам в БД $_SESSION[$_GET['id']] = true; // Пометка, что статья была просмотрена юзером }"
Сделав выжимку с разных постов привожу ее ниже. Как вы считаете будет ли так правильно? - данные хранить в БД (записывать просмотры в отдельную таблицу, записывать id новости, ip просматривающего материал пользователя и время); - записывать только в случае если записи с таким id материала и ip не обнаружено или запись time() старее 24 часов; - как метод дополнительной (клиентской) проверки, учитывать просмотр только после 10-15ти секунд нахождения пользователя на странице. Например устанавливая на странице с новостью таймер на 15 секунд который по завершении будет отправлять ajax запрос на добавление просмотра текущего материала. Время загрузки стр. увеличится, но может можно еще упростить?Насколько правильно так сделать? <?php $db = mysql_connect('localhost', 'root'); //подключаемся к серверу MySQL mysql_select_db("copyright"); //выбираем нашу БД $idcount = isset($_GET['id']) ? (int) $_GET['id'] : 0; $ip = $_SERVER['REMOTE_ADDR']; //получаем ip пользователя $result1 = mysql_query("SELECT * FROM ip_article WHERE ip_znach='$ip' and id_article_ip='$idcount'"); //проверяем его наличие в БД $row2 = mysql_num_rows($result1); if ($row2 < 1) //если нет, то... { mysql_query("INSERT INTO ip_article (id_article_ip, ip_znach) VALUES (\"$idcount\", \"$ip \")") or die(mysql_error()); mysql_query("UPDATE article SET count_show=count_show+1 WHERE id = '$idcount'"); } ?>
реально, через таблицу визитов ( с привязкой ip) и таблицей просмотров. Только просмотры будут суммироваться не как +1+2+3, а записывать в базу либо пользователей, которые просмотрели статью, либо их ip. Но данный метод будет не совсем корректен, если ip изменится Или одинаковые ip у пользователей
Ip меняется, на одном сайте, меня забанили по ip, что бы мне его открыть, приходится это делать, через другой браузер.
Тогда может лучше решение через сессии $_SESSION ? Можно добавить проверку, чтобы избежать не засчитывания просмотра, если заходило несколько человек с одного ip.
я и говорю - тут уже не совсем корректный подсчет будет, но хэй - если пользователи не зарегистрированы, то какой может идти разговор про точность просмотров?