Webové aplikace mají spoustu výhod.... ale i spoustu úskalí. Jedním z nich jsou uživatelé :-) - klikají si jak chtějí a nepočkají na dokončení requestu. Někteří dokonce na tlačítka zásadně klikají dvakrát místo jednou. Obzvláště zavilí uživatelé klikaji v prohlížeči na tlačítko Refresh/Reload a diví se, že se poslední akce provede znovu.
Potom není divu, že se v databázi objeví dvakrát stejný záznam nebo že se někdo pokusí dvakrát smazat stejný řádek v databázi.
Jak z toho ven? Některé ze způsobů jak tomu zabránit najdete v článku Preventing Duplicate Record Insertion on Page Refresh. Z obsahu vyjímám:
- Přístupy, které nefungují (laborování s neviditelnými políčky a pokusy o kešování stránky)
- Funkční přístupy:
- Mazání hlaviček + Repsonse.Redirect
- Detekování refreshe
- Odchytávání na úrovni databáze - různé přístupy
- Srovnání rychlosti přístupů
Dovolím si ještě přidat odkaz na ConfirmedButtons - tlačítka která se před odesláním zeptají uživatele jestli to myslí vážně. Podle mých zkušeností odchytí značnou část podobných problémů (ale protože využívají javascript a běží client side tak se na ně nedá 100% spolehnout).