Intereting Posts
Серьезные проблемы с файловыми файлами Как создать систему очереди PHP PHP: создание копии ссылочной переменной Завершение кода для расширений PHP в Zend Studio? Функция PHP с неограниченным количеством параметров Сервер Xampp PHP GET работает Fine POST не работает Установка глобальной переменной в Magento, GUI? Внедрение Laravel 5.1 «Illuminate \ Http \ Request» в ваших пользовательских классах? Где дезинформировать PHP $ _POST вход? Используя PDO, действительно ли мне нужно запустить два отдельных подготовленных оператора, чтобы получить количество возвращаемых строк? Сервер sql-сервера odbc_connect PHP: переместить с переименованием не удается, но комбинация операций копирования и отмены htaccess переписать, если существует перенаправленный файл Как chmod папка, чтобы сделать ее доступной для записи на сервере в php Самый быстрый способ проверить предыдущую запись перед вставкой

Ограничить работу пользователя на основе IP или в Cookie?

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

  1. Если пользователь вошел в систему, я могу зарегистрировать идентификатор пользователя и могу ограничить голосование по тому же элементу, если он снова попытается проголосовать.
  2. Если пользователь не вошел в систему, я могу зарегистрировать IP-адрес пользователя и ограничить голосование на одном и том же элементе с одного и того же IP-адреса.

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

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

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

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

Во-первых, есть несколько способов захватить 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 или сеансы, лучше всего иметь таблицу базы данных, в которой хранятся эти значения. Это может быть простая таблица с тремя столбцами: client_ip, item_id и date_created. Это позволит вам отслеживать, использовался ли конкретный IP-адрес для голосования по определенному элементу.

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

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