Как я могу ограничить IP, чтобы иметь возможность отправлять форму только один раз в час - PullRequest
0 голосов
/ 14 апреля 2019

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

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

Если вы хотите посмотреть сайт, посетите эту ссылку

Я попытался исследовать переполнение стека и другой веб-сайт, но не могу найти результат. Я не могу найти метод для JS / jQuery, это в основном просто PHP

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

если вы используете базу данных, вы можете использовать следующую структуру.Иметь таблицу базы данных (feedbackTable) и не менее 3 столбцов (IP, feedbackText, feedbackTime - отметка времени отправки отзыва).

При отправке формы пользователя получите необходимые переменные ...

$ip=$_POST["ip"];
$feedbackText=$_POST["feedbackText"];

Использовать информацию в запросе ...

$qry = "SELECT * FROM feedbackTable WHERE IP=:ip AND feedbackTime BETWEEN DATE_SUB(NOW(), INTERVAL 4 HOURS) AND NOW()";
// or NOW()-4 hours ... depends on database and version

Выполнить запрос.Если возвращается 0 строк (используйте rowCount () для подготовленных операторов PDO в PHP), тогда текст обратной связи можно добавить в базу данных и / или сделать видимым для пользователей.Если возвращается 1 строка, сообщите пользователю, что он не может отправить отзыв снова, пока не истечет 4 часа.На самом деле было бы лучше не делать форму видимой для пользователя, пока не истечут 4 часа с момента последней отправки.Вы можете сделать это путем «опроса» с использованием ajax и jQuery (скрыть форму после отправки, затем установить интервал - может быть, каждую минуту) в сценарии запроса к базе данных, используя ajax, когда сценарий возвращается, когда говорят, что 4 наших номера показаныформа снова) ... но это не обязательно.Пользователь может немного расстроиться, если он потратит время на заполнение отзыва, а затем вы скажете ему, что не принимаете его, потому что прошло недостаточно времени.Я бы не стал использовать локальное хранилище для экономии времени, поскольку у пользователя есть способы изменить эту информацию.

0 голосов
/ 14 апреля 2019

Ограничение скорости, с которой пользователь может что-то делать, лучше всего подходит для выполнения на сервере. Вот почему большинство примеров, которые вы нашли, написаны на PHP. Это потому, что пользователь может легко изменить то, что делает его машина, поэтому это безопаснее делать на сервере.

Если вы действительно хотите ограничить ставку для клиента, то вот схема того, как я бы это сделал:

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

Затем добавьте прослушиватель событий в событие отправки формы. В этом прослушивателе событий, если с момента последней отправки формы пользователем прошло менее 4 часов, запретите отправку формы. Вы можете сделать это с ev.preventdefault. Также не забудьте обновить вашу переменную.

...