Как я мешаю Обратному и Кнопкам Обновить повторно отправить мою форму?

Состояние FETCH_ERROR преобразуется в ОШИБКУ после нескольких последовательных попыток (устанавливается fetch.error.count ). Как только это произойдет, кортеж отправляется в потоке удаления с помощью AbstractStatusUpdaterBolt , и если у вас подключен DeletionBolt, то URL-адрес будет удален из индекса содержимого Elasticsearch. Он останется в индексе состояния, хотя и будет пересматриваться или не основываться на расписании для ОШИБК.

23
задан Brian Tompsett - 汤莱恩 11 May 2019 в 08:50
поделиться

8 ответов

стандартный путь состоит в том, чтобы сделать это на 3 шагах.

  1. страница формы утверждает, что поля к обработке страницы обработки страницы
  2. обрабатывают данные и перенаправления к странице результатов
  3. , страница результатов просто отображает результаты, перезагружение его не будет делать ничего плохого.
48
ответ дан 29 November 2019 в 00:46
поделиться

Это повреждает основную пользовательскую модель опыта браузера... пользователи должны всегда быть в состоянии использовать Кнопки Обновить и Кнопки "Назад" в их браузере. Рекомендуйте зафиксировать страницу иначе.

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

12
ответ дан 29 November 2019 в 00:46
поделиться

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

, Например, странице, которая отправила бы форму, нужно дать уникальный идентификатор, который отправлен с формой. Бизнес-логика должна тогда быть в состоянии распознать, что отправленная форма была уже обработана (поскольку (больше) уникальный идентификатор будет тем же), поэтому игнорирует вторую попытку.

'стандартный путь' все еще не мешает клиентам нажать кнопку "Назад" дважды... или даже возвратиться и повторно отправить форму, если они не думают (по любой причине), это было обработано.

8
ответ дан 29 November 2019 в 00:46
поделиться

Вы не должны пытаться «блокировать» эти действия. Что вы должны сделать, это убедиться, что ничего не происходит, когда кто-то «дважды отправляет» форму.

2
ответ дан 29 November 2019 в 00:46
поделиться

и в некотором браузере Вы canВґt даже делают это, и это хорошо!

1
ответ дан 29 November 2019 в 00:46
поделиться

Лучший способ состоит в том, чтобы иметь достаточно логики обработки сессии, что можно распознать 2-е (и вперед) попытка как, "это - просто перепредставление", и проигнорируйте его.

1
ответ дан 29 November 2019 в 00:46
поделиться

Решение vartec: s решает проблему перезагрузки, а не проблему возврата, поэтому вот решение этой проблемы:

  1. Страница формы устанавливает переменную сеанса, например session («fromformpage») ") = 1
  2. Страница обработки проверяет переменную сеанса, если ее =" 1 ", затем обрабатывают данные и перенаправляют на страницу результатов, если она отличается от = 1, а затем просто перенаправляют на страницу результатов.
  3. Страница результатов устанавливает переменную сеанса на «».

Затем, если пользователь нажимает кнопку «Назад», страница обработки не будет выполнять процесс снова, только перенаправит на страницу процесса.

0
ответ дан 29 November 2019 в 00:46
поделиться

Поместите этот код на страницу формы

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Response.Cache.SetExpires(DateTime.Now-new TimeSpan(1,0,0));

Response.Cache.SetLastModified(DateTime.Now);

Response.Cache.SetAllowResponseInBrowserHistory(false);
3
ответ дан 29 November 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: