Почему в MosetsTree можно проголосовать лишь один раз?

Действительно, почему в MosetsTree можно проголосовать лишь один раз?

Прежде чем ответить на вопрос, давайте разберёмся о чём вопрос. Вопрос состоит в том, что в настройках какого-либо компонента, будь то MosetsTree или какой-либо другой, содержащий в себе функционал голосования (выставления рейтингов), есть такой параметр как «Один ip-адрес равен одному голосу», что в принципе логично для избежания накрутки голосов. Но, к великому удивлению, пытаясь проголосовать даже с разных компьютеров, имеющих разные ip-адреса, не всегда это удаётся.

«Ничего подобного» — воскликните Вы. «Да, да, такое бывает» — отвечу я, и расскажу, почему.

Да, действительно, эта проблема встречается крайне редко, но думаю даже те, кто столкнулся с ней, заслуживают помощи в её решении.

Описанное в статье решение применимо ко всем версиям MosetsTree

Как это работает?

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

Запоминаем их. Теперь необходимо найти в файлах компонента на сайте функцию, отвечающую за запись рейтинга в базу данных. Т.к. в данной статье мы разбираем конкретную проблему с MosetsTree, открываем файл /components/com_mtree/mtree.php и смотрим, с помощью какого индекса компонент получает ip-адрес конечного пользователя на сайте. Видим строки вида:

$vote_ip = JRequest::getCmd( 'REMOTE_ADDR', '', 'server');
$remote_addr = JRequest::getCmd( 'REMOTE_ADDR', '', 'server');

Прежде чем что-либо исправлять, давайте проверим, какой ip-адрес отдает нам сервер по данному индексу, для этого, в корне сайта создадим php-файл, не важно с каким названием (например info.php). В созданном файле пишем:

<?php print_r($_SERVER['REMOTE_ADDR']); ?>

Обращаемся к созданному файлу по ссылке вида http://САЙТ/info.php

Смотрим и видим, что ip-адрес отдаваемый сервером является не адрес нашего компьютера, а адрес самого сайта. Т.е. получается, что каждый новый посетитель сайта, независимо с какого компьютера, и с какого ip-адреса он зашел, голосует адресом этого сайта. А как мы помним из настроек компонента: «Один ip-адрес равен одному голосу». Вот и ответ на вопрос, почему в MosetsTree можно проголосовать лишь один раз.

Теперь, нужно исправить эту проблему, для этого открываем интересную статью, читаем её, выясняем для себя по какому индексу отдается правильный ip адрес. Открываем файл /components/com_mtree/mtree.php и файл /components/com_mtree/Savant2/Savant2_Plugin_ratableRating.php и заменяем все встретившиеся индексы REMOTE_ADDR в файле на нужный. Важно не перепутать индекс и название переменной, в которую записывается значение.

В моём случае вполне достаточно было изменить REMOTE_ADDR на HTTP_X_REAL_IP

Описанный выше примере поможет также легко решить проблему и в других компонентах, главное найти функцию записи рейтинга.

Надеюсь, кому-то поможет данное решение.

Комментарии

Здесь еще никто не оставлял комментарии.

Добавить комментарий