|
|
|
| Подскажите, как заблокировать многократное нажатие на кнопку Submit, которое возможно при медленном интернете. Тоесть чтоб пользователь не смог умышленно послать много флуда в базу данных? (проверка на уникальность записи- не подходит, так как если пользователь нажмет на САБМИТ случайно и ему выведется сообщение, об ошибке, то он не поймет в чем дело) Короче, надо сделать так чтоб при повторном нажатии на САБМИТ, просто никаких отсылок не происходило.
И второй вопрос: когда пользователь нажал САБМИТ, и его перевело на какой нибудь Insert.php, который отвечает за непосредственно внос данных из $_POST['...'] в саму базу данных.. Собственнго вопрос заключается в том, как не дать пользователю просто зарестартить эту страницу и повторить неограниченое кол во раз внос данных..?
P.S про второй вопрос, покачто сделал так: После завершения выполнения вноса
прописываю
echo "<nosсript><meta http-equiv='REFRESH' content='0;url=Status.php?a=2'></nosсript>";
а там на Status.php информирую пользователя об исходе операции взависимости от переменной $_GET['a']. (эту страницу он может рестартить сколько влезит).
Здесь третий вопрос: На сколько это решение правильное?( а если правильное, то насколько рациональное?) И может ли злой человек, остановить процесс на insert.php и все таки зарестартить её пару разков... Заранее спасибо!! Надеюсь что понятно описал проблему, потому что текста много... | |
|
|
|
|
|
|
|
для: UnlikeAO
(19.08.2008 в 14:26)
| | >Короче, надо сделать так чтоб при повторном нажатии на САБМИТ, просто никаких отсылок не происходило.
Ну ладно в HTML вы этого добьетесь например при помощи js, но что мешает мне отправить на ваш скрипт insert.php запрос со своего компа например 100 раз подряд(при помощи fsockopen() например)
>как не дать пользователю просто зарестартить эту страницу и повторить неограниченое кол во раз внос данных
После занесения данных в таблицу, сделать редирект(перенаправление) на какую либо страницу, чтобы сбросить POST(GET) данные и делать это желательно при помощи header, чтобы пользователь не смог "остановить процесс на insert.php и все таки зарестартить её пару разков" | |
|
|
|
|
|
|
|
для: mihdan
(19.08.2008 в 14:33)
| | Я не знаю, чесно. ">Короче, надо сделать так чтоб при повторном нажатии на САБМИТ, просто никаких отсылок не происходило." Это мое предположение насчев возможного решения проблеммы, может быть оно и плохое, так я сюда и пишу, чтоб узнать хорошее решение... И если можно пожалуйста по подробней про способ с fsockopen() . | |
|
|
|
|
|
|
|
для: UnlikeAO
(19.08.2008 в 14:44)
| | 1.Оставляйте coockies. И если там за сегодня(или за некоторый период времени) уже был заход на сайт, обрабатывайте это.
2. Все то же самое с сессиями, обработка на стороне сервера.
3. Все то же самое но с ip-адресами, обработка на стороне сервера. | |
|
|
|
|
|
|
|
для: coba
(19.08.2008 в 15:15)
| | Я не понял если чесно, как это связано с моим вопросом?? Причем тут куки, вход на сайт и сессия.. | |
|
|
|
|
|
|
|
для: UnlikeAO
(19.08.2008 в 18:34)
| | Если честно-тоже не догнал. Поясните плиz | |
|
|
|
|
|
|
|
для: mihdan
(19.08.2008 в 19:13)
| | Очень просто - зачем вносить в базу данных если этот абонент уже нажимал на submit?
Как это сделать на сервере 2 последних пункта.
Как это сделать на клиенте - создавать кукис и обрабатывать submit через js, поднимая кукисы
А еще лучше совместить эти 2 метода. | |
|
|
|
|
|
|
|
для: coba
(19.08.2008 в 19:44)
| | короче я так подумал.... кукис это не способ, потому что их можно отключить и тогда рухнет весь замысел.. Можно запихать время добавления в сессию, и ограничить пользователя, чтоб он мог добавлять раз допустим в 30 секунд... а насчет кнопки САБМИТ, придумал хитрую штуку, можно после нажатия её просто прятать).
Вот еще вопрос, при редиректе с помощью Location можно передавать параметры методом GET? | |
|
|
|
|
|
|
|
для: UnlikeAO
(19.08.2008 в 20:51)
| | >а насчет кнопки САБМИТ, придумал хитрую штуку, можно после нажатия её просто прятать).
Это может быть и хорошо, да и прятать её не обязательно, а сделать на Javascript, чтобы после нажатия , кнопка была не активна.
Разные пользователи сидят в интернете и по разному к нему подключены.
Если я нажму кнопку САБМИТ, и пока будет идти загрузка, в силу нетерпения(скажем соеденение dialup, или еще по некоторым причинам), я нажму в браузере кнопочку "обновить" или F5, как будет тогда? | |
|
|
|
|
|
|
|
для: AcidTrash
(19.08.2008 в 21:47)
| | ну тогда можно сделать на самом деле сессию, которая будет позволять, пользователю жать сабмит только раз в 30 секунд... А там посути это уже не важно, при большом желании тот кто захочет что то зафлудить, он это сделает, просто при таких ограничениях, он должен быть наделен нехилой долей тупости, чтоб ждать 30 секунд каждый раз....)))) Вопрос теперь в другом...... Есть ли способ обойти вообще форму и послать данные на обрабатывающий ПХП, чтоб он занес их в базу данных.. если на обрабатывающем ПХП есть проверка if (isset($_POST['Nickname']...........)) { ........} . Кто то там писал про функцию fsockopen().. Что это вообще?? | |
|
|
|