Повторная отправка формы.

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
matrixphp
Сообщения: 4
Зарегистрирован: 04 мар 2011, 23:41

Новостной сайт (написан по PHP). Сервер (LAMP) старенький , часто бывает перегружен и сайт начинает тормозить или просто сильно удален от пользователя, из-за чего тоже возникает задержка. Пользователь прочитал новостную статью и решил оставить комментарий. Заполнил форму и нажал отправить, но т.к. сервер тормозит страница обновилась не сразу и пользователь еще несколько раз пытается создать комментарий (отправлял форму). В итоге он несколько раз создал один и тот же комментарий. Подскажите, пожалуйста, как можно избежать повторной обработки запроса, чтобы, если опираться на данный пример, создавался только 1 комментарий.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Два способа:
1. Плохой. Блокировать JavaScript'ом кнопку отправки после первого нажатия.
1. Хороший. При занесении комментария в БД проверять комментарий на полный дубль.
Даже самый дурацкий замысел можно воплотить мастерски
matrixphp
Сообщения: 4
Зарегистрирован: 04 мар 2011, 23:41

JS согласен не эффективно, защитит от дурака лишь.
"Проверять", но ведь такая же проблема может возникнуть при работе с деньгами к примеру. Ну не напрямую с деньгами, помню про смс уведомления и прочее, а вот при работе с системой баллов как в ВК, где нет подобных подтверждений вероятно можно было бы, к примеру, подарок несколько раз. Неужели нет какого-то более универсального решения, чтобы заблокировать повторные запросы, ведь наверняка проблема стара как мир.?
matrixphp
Сообщения: 4
Зарегистрирован: 04 мар 2011, 23:41

На основе ключей (ключ по времени времени к примеру) возникла идея:
В сессию записывать ключ и пользователю сообщать этот ключ через скрытое поле в форме. После отправки формы, перед записью данных обработки проверять совпадение ключей.
Проблему повторной отправки это решит, но если на сайте 100+ форм, переделывать это трудоемко...
Тогда можно попробовать передавать пользователю ключ кукой, но есть подозрения что все-таки особо упорные пользователи будут закликивать так (достаточной долго, чтобы сервер попытался, что-то отправить), что кука будет успевать обновляться и часть запросов пройдет.
Что скажете на такие предложения?
matrixphp
Сообщения: 4
Зарегистрирован: 04 мар 2011, 23:41

Всем спасибо. Сделал через сессия + куки - все работает.
Ответить