ссылка

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

Двойная отправка происходит, когда нетерпеливый пользователь отправляет форму несколько раз, что вызывает проблемы. Эта проблема может быть исправлена ​​с помощью JavaScript (в частности, сценариев jQuery), которые отключают кнопку отправки после отправки формы - недостатком является то, что на клиентах отключен JavaScript.

Есть и серверные методы обнаружения.

Итак, мои вопросы:

Как люди преодолевают двойное подчинение? Что является реальным примером проблемы, вызванной двойным подчинением? В какие-либо фреймворки веб-приложений встроены инструменты двойной отправки?

 Nathan Long18 янв. 2012 г., 15:23
Смотрите связанный вопрос:stackoverflow.com/questions/2830542/...
 Dead Programmer15 янв. 2011 г., 14:10
Пример из реальной жизни: PayPal несколько раз добавлял товары в корзину покупок, поскольку пользователь не получил никакого ответа, пока первый запрос все еще обрабатывается.

Ответы на вопрос(2)

Решение Вопроса

а также используете Struts 2, вы ссылаетесь на эту ссылку, в которой рассказывается об использовании токена.

http://www.xinotes.org/notes/note/369/

Токен должен быть сгенерирован и сохранен в сеансе для начального рендеринга страницы, когда запрос отправляется вместе с токеном в первый раз, в действии Struts запустите поток с именем потока в качестве идентификатора токена и выполните логику независимо от того, что имеет клиент запрашивается, чтобы при повторной отправке клиентом того же запроса проверить, запущен ли еще поток (thread.getcurrentthread (). interrupted), если он все еще работает, затем отправить клиентское перенаправление 503.

Пожалуйста, посмотрите на ExecuteAndWaitInterceptor Struts 2Code, логика этого в сочетании с токеном поможет быстро нажать

 Dead Programmer17 нояб. 2011 г., 15:43
@Gustav: Можете ли вы объяснить, что вы говорите о нескольких вкладках
 Sobin Sunny03 дек. 2015 г., 10:45
Выше ссылка не работает должным образом. Я думаю, что они могли изменить фактические данные с этого сайта .. Пожалуйста, обновите свой ответ
 Gustav Bertram17 нояб. 2011 г., 12:35
Токены в сеансах плохо обрабатывают параллелизм. Например, несколько вкладок в браузерах.
 Gustav Bertram17 нояб. 2011 г., 15:50
Ой, неправильно прочитал ответ. Мысль, которую вы имеете в виду, означает в универсальном сеансе.
 Dead Programmer17 нояб. 2011 г., 16:33
@Gustav: сессия не универсальна, относится к пользователю, вошедшему в систему.

размещение ставок на сайте ставок. Пользователи будут дважды щелкать и получать две ставки. Фигово! Проверок Javascript было недостаточно для предотвращения этого.

Решение:

СоздайтеUUID/GUID скрытый ввод в форму с использованием серверного языка сценариев, который отображает форму.

При отправке формы немедленно добавьте это в таблицу базы данных с именемUniqueSubmissions (например). Затем приступите к обработке.

Каждый последующий запрос с тем же UUID / GUID будет отклонен, если он найден вUniqueSubmissions Таблица.

Это сработало для нас. Надеюсь, это поможет ответить на ваш вопрос!

 JHarley116 янв. 2011 г., 14:40
Хороший! но что такое UUID и GUID?
 hanshenrik27 авг. 2017 г., 13:15
это прекрасно работает для меня:document.querySelector("#submitbutton").addEventListener("click",function(ev){ev.target.disabled=true;}); - при условии, что страница обновляется после нажатия, в отличие от XMLHttpRequest или простого ответа
 Muflix24 июл. 2018 г., 14:17
Почему Javascript не работает, какова была реализация?
 Ciaran Archer16 янв. 2011 г., 18:38
Добавлены ссылки на UUID / GUID - большинство языков дают возможность программно создавать их, например, я использую ColdFusion и могу создать один, используяcreateUUID().
 Sobin Sunny03 дек. 2015 г., 10:54
Ваша идея в порядке. Но я думаю, что эта архитектура столкнется с некоторыми ограничениями в ответе Ajax. Как мы можем обновить UUID? GUID без рендеринга страницы.

Ваш ответ на вопрос