Autor | Zpráva | ||
---|---|---|---|
send Profil * |
#1 · Zasláno: 29. 4. 2010, 13:57:41
Ahoj. Jak zamezit dvojímu odeslání dat z formuláře? Vím, že by se mělo vygenerovat ID, které zašlu s formulářem uživateli, vrátím si ho v hidden elementu a pak ID změním a budu mít už rozdílné ID. Ale jak to naprogramovat? Stačil by mi jen lehký návod. Lámu si hlavu s tím jak dostat ty ID do dvou proměnných pro porovnání (nepřepisovat si stále jednu)... Děkuji
|
||
bohyn Profil |
#2 · Zasláno: 29. 4. 2010, 18:37:14
send:
Vytvoření tokenu a vložení do formuláře // někam na začátek scriptu session_start(); $token = md5(time()); $_SESSION[$token] = true; // do formulaře pak vypiš toto echo "<input type='hidden' name='token' value='{$token}'>"; Kontrola tokenu: session_start(); if(isset($_POST['token']) && isset($_SESSION[$_POST['token']])) { unset($_SESSION[$_POST['token']]); // formulář odeslán v pořádku } else { // formulář byl odeslán podruhé } |
||
send Profil * |
#3 · Zasláno: 29. 4. 2010, 20:44:42
bohyn:
Moc tomu nerozumím... Při prvním kliknutím na tlačítko budu mít nastaven $_POST['token'] a session také (aktuální datum) a odnastaví se mi session. Při druhém kliknutí se mi znovu nastaví session (jiné datum aktuálnější), změní se hodnota v hidden, takže podmínkou to projde také. Kde nastane ta změna při dalším odeslání? Díky |
||
bohyn Profil |
#4 · Zasláno: 29. 4. 2010, 23:42:19 · Upravil/a: bohyn
send:
Pokud dá návštěvník refresh tak se odešle znovu starý token a ten touto validací neprojde. Pokud po odeslání návštěvník znovu vyplní formulář a odešle, tak to samozřejmě projde. Edit: jinak znovuodeslání formuláře se dá ještě zabránit tím, že formulář zpracovává jiný script (třeba odeslat.php) a ten pak přesměruje prohlížeč hlavičkou header("Location: /formular.php", 303) zpátky na formulář (nebo jak je potřeba). |
||
send Profil * |
#5 · Zasláno: 30. 4. 2010, 10:09:11
bohyn:
Díky bohyne. Promiň, že s tím tak dlouho otravuju, ale ještě mi něco není jasné. "Pokud dá návštěvník refresh tak se odešle znovu starý token a ten touto validací neprojde." Tomu právě nerozumím. Při refreshi stránky (znovunačtení té samé) se mi přece na začátku skriptu změní $token, tím pádem i Session. A tento změněný token se pošle formulářem... |
||
bohyn Profil |
#6 · Zasláno: 30. 4. 2010, 14:16:59
send:
Pokud se odesláním formuláře dostaneš zpátky na stránku s formulářem tak script sice nastaví nový token, ale při refreshi se odesílá ten starý (prohlížeč si pamatuje co odeslal předtím) a ten neprojde protože už neexistuje v session. Pokud návštěvník znovu vyplní formulář a odešle tak to samozřejmě projde (a o to doufám jde). |
||
send Profil * |
#7 · Zasláno: 30. 4. 2010, 14:44:55
bohyn:
Díky, teď je mi to úplně jasný :) |
||
Časová prodleva: 14 let
|
0