Autor Zpráva
23k
Profil
Nevim jak to popsat tak to popisu tak jak mi to prinese slina na jazyk.
Kdyz mi nekdo na webu prispeje komentarem ke clanku ci do fora tak ho to automaticky pres HEADER hodi zas jinam tak neni moznost ze by po odeslani zmack F5 a bylo to tam 2x. Nicmene se stane obcas ze jak se stranka nacita a obcas je to takove pomalejsi a chvili se nic nedeje tak to uzivatel (tlacitko SUBMITu) zmackne 2-3x za sebou rychle a prave tolikrat se prispevek prida.

Jak je to mozne? Uz se mi to stalo i tady na tomto foru. CO JE TO ZA STAV? Jak se proti tomu chranit?
Leo
Profil
Stav je to ten, ze prohlizec uz na server poslal HTTP pozadavek a tim padem i data, PHP skript (uvedeny v action) uz je ulozil do databaze, ale jeste (nebo Apache) neposlal zpatky prohlizeci odpoved. Chranit se muzete ruzne, ale jedine spolehlive je kontrolovat pred akci na serveru, jestli jeste uz stejna data nedostal. Leo
23k
Profil
Mas pravdu LEO jako vzdy.
Testnul sem si to na svem foru kde mam 5 minutovou flood ochranu a pri odesilani prispevku jsem mackal submit button jak pominuty, vlozilo se pouze jednou.

No tak zitra si trosku prekopu skripty, dik
llook
Profil
Nepoužíváš Operu? Tam je totiž ještě další problém - po odeslání formuláře je zobrazená pořád ta samá stránka a Opera se tváří, jako že pořád načítá. Přitom už všechna data přijala, jak se můžeš přesvědčit některým packet snifferem.

To se stává, když se pošleš POST formulář a cílová stránka formuláře přesměruje sama na sebe. Nebo když se liší jen fragmentem (přesměrování z /index.php na /index.php#fragment).
Tady na fóru je to k vidění, když pošleš dva příspěvky po sobě.
Leo
Profil
"Nebo když se liší jen fragmentem (přesměrování z /index.php na /index.php#fragment)."

Coz - jen doplneni - je to same: fragment se protokolem http na server neposila. Mozna by u te Opery pomohlo patricne kesovani? Leo
llook
Profil
Je to to samé pro server, ale problém je na klientovi.
Myslel jsem případ, kdy skript /index.php, volaný metodou POST, udělá tohle:
header("Location: http://$_SERVER[SERVER_NAME]/index.php#fragment", 303);


A načítání v Opeře zatuhne. Je to to samé s fragmenty i bez nich, ale protože problém je v Opeře, zmínil jsem, že ani fragmenty nepomůžou.

Musí se prostě lišit REQUEST_URI.
Leo
Profil
Proc 303? Leo
llook
Profil
Jo sorry, před tím 303 by ještě mělo být true (takhle: header('Location: něco', true, 303)).
Kdybych ponechal 302, tak by některé prohlížeče zachovali metodu POST (něco o tom psal Vrána)
halogan
Profil
> Jak se proti tomu chranit?
Jak rika Leo kontrola dat, ale take neskodi onclick udelat ze submitu readonly/disabled.
Leo
Profil
"Jak rika Leo kontrola dat, ale take neskodi onclick udelat ze submitu readonly/disabled."

Taky jsem si to myslel, ale uz moc nemyslim. Uzivatel vyplni formular, odesle, nic se nedeje, tak legitimne (jako rikaji nekteri kaspari v politice) to chce poslat znova. Musite pocitat s tim, ze to na server treba ani nedorazilo... Leo
Toto téma je uzamčeno. Odpověď nelze zaslat.

0