Предотвращение двойной подачи заявок

Точный дубликат: как обрабатывать несколько представлений на стороне сервера

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

У меня есть два метода, которые можно использовать в тандеме:

  1. JavaScript отключение кнопки
    • Недостаток: не работает, если JavaScript отключен
  2. Внутренняя проверка - посмотрите, как давно последний пользователь этого типа пришел от этого пользователя, и выведите ошибку, если не так давно
    • Недостаток: если два представления достаточно близки друг к другу, каждый может быть не в состоянии узнать о другом

Я ищу экспертов по предметам, чтобы поделиться своими лучшими практиками, а также эзотерическими уловками. Может быть любой язык и рамки, но Django представляет особый интерес. В Интернете было много написано об этой задаче, но было бы неплохо показать лучшие практики, показанные здесь.

1 ответ

Распространенным решением является создание токена на сервере каждый раз, когда вы создаете форму. Сохраните токен на сервере, добавьте его в форму как скрытое поле и удалите его, как только вы получите форму для отправки с этим токеном.

Если вы получаете отправку формы без действительного токена, это означает, что форма уже отправлена, и игнорируйте ее.

Это имеет дополнительное преимущество добавления защиты XSRF в ваш проект.

Другие вопросы по тегам