Ако искате да предотвратите двойни подавания, трябва да съхраните състоянието „е изпратено“ срещу „не е изпратено“. Имате няколко опции за това къде да съхранявате тази информация.
- База данни - Добавете скрито поле с автоматично генерирана стойност, която е уникална (можете да генерирате кратък произволен низ от него и да добавите текущото време). Тази стойност може да се използва и за идентифициране на разговора - ако имате нужда от уеб разговор със състояние. Добавете тази стойност към базата данни и я направете уникална. Недостатъци:излишно съхранение в базата данни, намалена производителност при вмъкване на коментар, трябва да се генерира уникален низ.
- Сесия - Добавете същото скрито поле със стойност, генерирана в подобен въпрос. Когато потребителят изпрати формуляра, запазете стойността в сесията, ако вече не е там. Ако е така, това е двойно подаване. Недостатъци:все още трябва да генерирате уникалния токен.
- Браузър - (1) Добавете малко JavaScript, за да деактивирате бутона за изпращане, след като щракнете върху него. (2) имат скрито поле, което започва със стойността 0 и се променя на 1, когато потребителят щракне върху бутона за изпращане. Ако потребителят щракне отново върху бутона, вие проверявате дали стойността е 1 и прекратявате, ако е. Предимства:няма уникален низ. Недостатъци:изисква активиране на javascript; може да се нуждаете от низа, за да внедрите уеб разговори със състояние.