Основной курс по Joomla

JoomGallery 1.5.6.3 – блокировка повторного голосования - IP+cookie(обновлено) - Решение №2 (плагин)

0 Пользователей и 1 Гость просматривают эту тему.
  • 47 Ответов
  • 12983 Просмотров
*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
какой плагин качать то надо ? и что это за вложения в 33 посте ?
можно по подробней что и куда

Вынес в отдельную тему, чтобы не сбивать с толку посетителей темы, созданной ART-DELI

РЕШЕНИЕ для 1.5.6.3 - блокировка повторного голосования по IP или куки - плагин (обновлён) + небольшой хак

Переключение режимов IP-куки производится в настройках плагина (через менеджер плагинов)

Конечно, если в браузере пользователя стоит очищать куки при выходе (как у меня например  ;D) то куки тоже не помогут.

Имеет в бОльшей степени смысл, если разрешено голосование для незарегистрированных, так как для зарегистрированных там есть проверка по userid.

Хотя работает для обоих вариантов, причём как для обычного, так и для AJAX-голосования.

Если разрешено голосование для незарегистрированных пользователей - плагин не даёт проголосовать с тем же IP за ту же фотографию.

Если разрешено голосование только для зарегистрированных пользователей, то сначала срабатывает имеющаяся проверка по userid.
Далее - если userid другой, то другому зарегистрированному пользователю с тем же IP не даёт проголосовать уже плагин.

Выводится сообщение "Оценка не засчитана: Вы можете отдать свою оценку только один раз."
Повторно голос в базу не пишется.


Хотелось сделать малой кровью, плагином, используя привязку к событиям галереи (описание на сайте разработчика ).
К сожалению, не получилось без небольшого хака, поскольку у разработчика закрались явные ошибки в описании события onJoomBeforeVote (хотя в целом набор событий впечатляет - многое можно решить плагинами).


Итак, что нужно сделать:

Устанавливаем и публикуем плагинчик, в настройках плагина выбираем нужный режим (по IP или по куки)


+ в файле components\com_joomgallery\models\vote.php вставляем в районе строки 172 (перед комментарием // Trigger event 'onJoomBeforeVote'):

Код
$row->picid = $this->_id;    $row->userip = $_SERVER['REMOTE_ADDR'];

Больше ничего не требуется для первого варианта.



Ещё один вариант - для более детальной проверки (не только IP, на случай, если на одном IP сидит не один пользователь) можно немного изменить хак, вместо

Код
$row->userip = $_SERVER['REMOTE_ADDR'];

сделать например так:

Код
$row->userip    = $_SERVER['REMOTE_ADDR'].'-'.gethostbyaddr($_SERVER['REMOTE_ADDR']).'-'.$_SERVER['HTTP_USER_AGENT'];

И далее в components\com_joomgallery\models\vote.php в строке 201 - то же самое.

Единственное ещё - в базе в таблице #__joomgallery_votes увеличить размер поля userip - дефолтное там varchar(15)

[вложение удалено Администратором]
« Последнее редактирование: 26.02.2011, 00:10:15 от SDKiller »

*

ArtTeam

  • Осваиваюсь на форуме
  • ***
  • 188
  • 0
varchar(15) на что изменить надо
И где искать установленій плагин ? в плагинах Joomla или в самой JoomGallery
« Последнее редактирование: 25.02.2011, 17:58:10 от ArtTeam »

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
varchar(15) на что изменить надо

Можно varchar(255)

Цитировать
И где искать установленій плагин ? в плагинах Joomla или в самой JoomGallery

В админке в менеджере плагинов Joomla

*

ArtTeam

  • Осваиваюсь на форуме
  • ***
  • 188
  • 0
« Последнее редактирование: 25.02.2011, 19:06:26 от ArtTeam »

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
У меня работает.
В таблице #__joomgallery_votes в поле userip что пишется?

*

ArtTeam

  • Осваиваюсь на форуме
  • ***
  • 188
  • 0
У меня работает.
В таблице #__joomgallery_votes в поле userip что пишется?
спасибо вроде уже все работает, а есть ли ограничение на количество голосов  varchar(255)

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
а есть ли ограничение на количество голосов  varchar(255)

Не совсем понял вопрос.
С включённым плагином у нас получается ограничение - один голос на одного проголосовавшего

*

ArtTeam

  • Осваиваюсь на форуме
  • ***
  • 188
  • 0
при varchar(255) какое количество человек сможет голосовать ? 1000, 2000, ?
и как я понимаю при втором хаке динамичный айпи уже не помогает, получается привязка идет к  браузеру.

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
при varchar(255) какое количество человек сможет голосовать ? 1000, 2000, ?

От этого не зависит.
Длина поля увеличена, потому что у нас теперь вместо IP фиксированной длины получается строка, включающая в себя несколько характеристик.

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

С динамическим IP при обоих вариантах ничего не поделаешь.
При 2-м варианте привязка идёт комплексная по нескольким характеристикам, сделано это наоборот чтобы не отсеивать по IP других пользователей.
С другой стороны, при привязке только к USER_AGENT возможны совпадения этого параметра у разных пользователей.

Для динамического IP вариант только через куки.
Сделаю попозже и такой.
« Последнее редактирование: 25.02.2011, 22:28:19 от SDKiller »

*

ArtTeam

  • Осваиваюсь на форуме
  • ***
  • 188
  • 0
Цитировать
Для динамического IP вариант только через куки.
Сделаю попозже и такой.
А когда планируете это осуществить ?

*

Beer

  • Moderator
  • *****
  • 1036
  • 40
  • БИРУ - БИР!
Поставил по первому варианту - все работает путем!
SDKiller +1

Сделай пожалуйста кнопочку под фото для просмотра проголосовавших и поставленных ими оценок!

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
А когда планируете это осуществить ?

Сделал. Обновил файл плагина в первом посте.

*

ArtTeam

  • Осваиваюсь на форуме
  • ***
  • 188
  • 0

Цитировать
Конечно, если в браузере пользователя стоит очищать куки при выходе (как у меня например  Grin) то куки тоже не помогут.
А как же тогда лучше провести фото голосование ?

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
А как же тогда лучше провести фото голосование ?

Ну что поделать )))

Захотят накрутить - накрутят.
Есть ведь ещё прокси-анонимайзеры, а еще бывают проги для подмены не только IP, но и user_agent и даже MAC-адреса сетевой карты.
А ещё есть буксы и САР, где люди за 1-3 цента покупают голоса.

*

cry_wolf

  • Захожу иногда
  • **
  • 21
  • 0
большое спасиба работает от повторного голосавание теперь остался вопрос если ставлю по кукам то я раз в сутки могу с одного компа голосовать за одну фотографию.... Тоже самое условие таже соблюдается и для зарегестрированых пользывателей...
« Последнее редактирование: 02.03.2011, 00:02:15 от cry_wolf »

*

Garum

  • Завсегдатай
  • *****
  • 654
  • 47
  • Акула пера
Второй способ не работает у меня.
http://izans.ru/oboi?view=category&catid=6 фото самых красивых девушек на рабочий стол

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
Второй способ не работает у меня.

Конкретнее. Я сам уже в способах запутался )))

*

Garum

  • Завсегдатай
  • *****
  • 654
  • 47
  • Акула пера
Ещё один вариант - для более детальной проверки (не только IP, на случай, если на одном IP сидит не один пользователь) можно немного изменить хак, вместо
Вот  этот. Делаю все как написано, и по IP не блокирует голосованиею
http://izans.ru/oboi?view=category&catid=6 фото самых красивых девушек на рабочий стол

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
Вот  этот. Делаю все как написано, и по IP не блокирует голосованиею
Посмотрите в таблице #__joomgallery_votes - какие значения записываются в поле userip

Спасибо, все отлично работает! Вот бы еще сделать, чтобы после голоса форма голосования пряталась, а вместо нее надпись типа "Ваш голос принят и тп." Было бы совсем хорошо!

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
Вот бы еще сделать, чтобы после голоса форма голосования пряталась
В принципе это можно сделать на уровне шаблона с помощью js, назначив для кнопки голосования событие, по которому для формы голосования будет назначаться style.display="none"

*

ArtTeam

  • Осваиваюсь на форуме
  • ***
  • 188
  • 0
SDKiller
А вы не могли бы добавить для голосования подтверждения по e-mail
Чтобы когда  проголосовал за фото ему на почту приходила ссылка для подтверждения голоса и тока после подтверждения голос был учтен.

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
SDKiller
А вы не могли бы добавить для голосования подтверждения по e-mail
Чтобы когда  проголосовал за фото ему на почту приходила ссылка для подтверждения голоса и тока после подтверждения голос был учтен.

Навскидку такое плагином не решить.
То есть отправку на email можно сделать плагином, а вот учёт голоса после подтверждения - это уже надо компонент ковырять

*

ArtTeam

  • Осваиваюсь на форуме
  • ***
  • 188
  • 0
Навскидку такое плагином не решить.
То есть отправку на email можно сделать плагином, а вот учёт голоса после подтверждения - это уже надо компонент ковырять
Так єту проблему что не как не решить ?
И как можно для оценки прикрутить капчу ?


*

Beer

  • Moderator
  • *****
  • 1036
  • 40
  • БИРУ - БИР!
 Как запретить юзеру голосовать за свою же фотку?

*

masyanya

  • Новичок
  • *
  • 3
  • 0
Подскажите, пожалуйста, как сделать, чтобы пользователь мог голосовать только 1 раз и только 1 фото?

*

ziArt

  • Захожу иногда
  • **
  • 16
  • 0
Как сделать активным сразу два варианта зашиты и по айпи и куки?

*

Sharks_andron

  • Осваиваюсь на форуме
  • ***
  • 66
  • 1
Спасибо за труды.
Первый вариант применил - понравилось, посмотрим и дальше как будет.


*

quexx

  • Новичок
  • *
  • 6
  • 0
Удалили меня что-то.. стало быть давно отсутствовал. Но не об этом..
Подскажите, пожалуйста, как сделать, чтобы пользователь мог голосовать только 1 раз и только 1 фото?
Дак оно так и есть.. или я чего-то не понял..?
Как сделать активным сразу два варианта зашиты и по айпи и куки?
Вот и у меня такая же проблема, то у кого-то куки каждый раз сбрасываются, то не возможно по IP проверить.. Думаю стоит дописать плагин третьим вариантом где можно выбрать IP+cookie сразу же.. Никто не против если я доделаю как будет минутка и сюда положу?

*

SDKiller

  • Dev Team
  • ******
  • 2734
  • 320
  • ...ergo sum
Да ради бога, заодно можете обновить под новую версию JG
Я давно не следил за её обновлениями