Ограничить активность пользователя на основе IP или куки? - PullRequest
4 голосов
/ 25 января 2011

Я работаю над сценарием PHP, который позволяет пользователям голосовать за определенные элементы.Любой пользователь, вошедший в систему или нет, может голосовать.Рассмотрим следующие случаи:

  1. Если пользователь вошел в систему, я могу зарегистрировать идентификатор пользователя и могу ограничить голосование по тому же элементу, если он попытается проголосовать снова.пользователь не вошел в систему, я могу зарегистрировать IP-адрес пользователя и ограничить голосование по тому же элементу, с того же IP-адреса.Второй случай сводит меня с ума, вроде как.Мне было интересно, что может случиться так, что пользователь может сменить IP, а затем снова проголосовать за тот же элемент.Теперь, даже если я использую файлы cookie или сеансы, может также случиться, что пользователь начинает новый сеанс (или удалил файлы cookie), чтобы снова проголосовать за тот же элемент.

    Я что-то упустил?Если нет, как справиться с такими ситуациями?Есть мысли?

Ответы [ 3 ]

6 голосов
/ 25 января 2011

Я бы серьезно подумал об использовании капчи, reCaptcha - хороший выбор.

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

2 голосов
/ 25 января 2011

Во-первых, есть несколько способов получить IP-адрес клиента с помощью PHP. Вот 3 метода, которые я знаю:

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_CLIENT_IP'])) {
    $ipAddress = $_SERVER['HTTP_CLIENT_IP'];
} else if (isset($_SERVER['REMOTE_ADDR'])) {
    $ipAddress = $_SERVER['REMOTE_ADDR'];
}

Во-вторых, если вас беспокоит нестабильное хранилище, такое как файлы cookie или сеансы, лучше всего иметь таблицу базы данных, в которой хранятся эти значения. Это может быть простая таблица с 3 столбцами: client_ip, item_id и date_created. Это позволит вам отслеживать, использовался ли определенный IP-адрес для голосования за определенный элемент.

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

1 голос
/ 25 января 2011

Вы можете попробовать использовать evercookie , это довольно сложно очистить

...