După trimiterea datelor din formular și procesarea acestora cu un script de server, este necesar să se ia măsuri pentru a proteja împotriva trimiterii repetate a datelor pentru a evita înregistrările duplicate nedorite în baza de date și în scrisorile din poștă. Să analizăm două modalități simple de protejare a formularelor de reluarea datelor.
Totul începe cu faptul că utilizatorul completează într-o anumită formă HTML de pe site-ul dvs., și apoi, atunci când toate câmpurile sunt completate, acesta trimite datele la server prin apăsarea butonului „Trimite“, de „Checkout“, „Cumpără“, și așa mai departe. Etc. Și trimiterea datelor de formular pe server se poate face în două moduri - GET și POST.
Desigur, nu mulți utilizatori actualizează pagina imediat după trimiterea datelor din formular (s-ar părea, de ce ar face-o deloc), dar uneori aceeași problemă poate apărea atunci când apăsați butonul "Înapoi". Dacă transferul este efectuat către pagina din care au fost trimise datele de formular, acesta nu se va încărca, iar în loc de pe ecran va apărea un mesaj care indică faptul că datele sunt depășite sau ceva de genul acesta.
Problema re-trimiterea datelor în formularele relevante, atunci când, imediat după aceea, există adăugarea unui nou rând în baza de date, de exemplu, ordinea în magazinul online, noua înregistrare de utilizator, și așa mai departe. D. Pe lângă e-mail-notificarea corespunzătoare este trimisă. Pentru a evita înregistrările duplicate nedorite în baza de date și în scrisorile din e-mail, trebuie să împiedicați repetarea datelor. Și dacă spui mai precis - preveni sau ignora. Prin urmare, luăm în considerare două modalități principale:
Deci, la punctul din scriptul în care trebuie să scrieți o nouă linie în baza de date sau să trimiteți o notificare la e-mail, trebuie să adăugați următorul cod:
În acest exemplu, datorită vastele posibilități de minunat PHP limbaj de programare, suntem adăugarea la informațiile din antetul de pagina pe care ar trebui să efectueze migrarea, și apoi, prin utilizarea de ieșire () se termină scriptul curent, t. Pentru a. Pagina va fi în continuare imediat a reîncărcat și nu are nici un rost să torturezi serverul executând comenzi sub linia curentă de cod.
Cel mai important lucru aici este că tranziția poate fi efectuată în aceeași pagină unde am fost înainte, dar toate post-datele vor fi șterse la zero, ceea ce înseamnă că pagina este reîmprospătată se întâmplă retrimiteți forma vechilor date către server - doar ce am nevoie.
Principalul dezavantaj al acestei metode este actualizarea inutilă a paginii. Acest lucru nu este cu siguranță critic, dar nu absolut necesar, deci prima metodă nu poate fi numită ideală.
Metoda nr. 2: "Sesiune" - ignorarea în mod repetat a datelor trimise
În această metodă, vom folosi sesiunea, deci asigurați-vă că sesiunile sunt declarate la începutul scriptului și sunt gata de utilizare. Pentru aceasta, utilizați funcția de inițializare a sesiunii session_start ().
Esența metodei este de a adăuga un câmp ascuns suplimentar la forma țintă cu un nume arbitrar și cu o valoare arbitrară, de exemplu:
Mai întâi, desigur, trebuie să înregistrați o sesiune cu ID-ul sesiunii și să o atribuiți cât mai mult posibil unei valori abstracte cu una dintre funcțiile hash. de exemplu MD5.
Probabilitatea unui dublu în acest caz este practic zero, dar dacă nu credeți așa, puteți crește intervalul aleatoriu sau puteți complica algoritmul după gustul dvs.
Apoi, atunci când formularul este transmis, datele sunt trimise la server, în cazul în care acesta este verificat pentru valabilitatea și corectitudinea funcției speciale, iar dacă de succes există o acțiune de conversie (scrie la baza de date, trimite e-mail, și așa mai departe. D.), și numai în cazul unui test de succes, Împărțim imediat sesiunea noastră cu ID-ul sesiunii.
Acum trebuie doar să verificăm sesiunea sesizată cu valoarea ascunsă a câmpului sesiune cu același nume. transmise prin forma noastră. Dacă acestea sunt identice, atunci este logic să verificați restul datelor, iar dacă nu - formularul a fost încercat din nou, în timp ce sesiunea în sine a fost redefinită și valoarea a fost reținută. care a fost transmis prin intermediul formularului a rămas veche.
După cum puteți vedea, totul este foarte simplu - am analizat două modalități simple de a trimite din nou datele formularului. Ambele funcționează bine, bine dovedite și testate în mod repetat în practică pe diferite site-uri. Dar, în opinia noastră, este de preferat să folosiți ulterior cea de-a doua metodă cu sesiunea.