Предотвращение двойной подачи заявок
Точный дубликат: как обрабатывать несколько представлений на стороне сервера
Общая задача под рукой: предотвращение двойной подачи формы в многопользовательском веб-приложении. Думайте о финансовых операциях.
У меня есть два метода, которые можно использовать в тандеме:
- JavaScript отключение кнопки
- Недостаток: не работает, если JavaScript отключен
- Внутренняя проверка - посмотрите, как давно последний пользователь этого типа пришел от этого пользователя, и выведите ошибку, если не так давно
- Недостаток: если два представления достаточно близки друг к другу, каждый может быть не в состоянии узнать о другом
Я ищу экспертов по предметам, чтобы поделиться своими лучшими практиками, а также эзотерическими уловками. Может быть любой язык и рамки, но Django представляет особый интерес. В Интернете было много написано об этой задаче, но было бы неплохо показать лучшие практики, показанные здесь.
1 ответ
Распространенным решением является создание токена на сервере каждый раз, когда вы создаете форму. Сохраните токен на сервере, добавьте его в форму как скрытое поле и удалите его, как только вы получите форму для отправки с этим токеном.
Если вы получаете отправку формы без действительного токена, это означает, что форма уже отправлена, и игнорируйте ее.
Это имеет дополнительное преимущество добавления защиты XSRF в ваш проект.