Stránka 1 z 1
Jak zabránit paralelnímu zpracování PHP skriptu na serveru?
Napsal: čtv 20. říj 2005, 23:06
od Dynalon
Dobrý den měl bych dotaz - dá se nějakým jednoduchým způsobem zabránit tomu aby uživatel několikanásobným klepnutím např na tlačítko submit ve formuláři vyvolal ten samý PHP skript? (skript běží zpravidla několik vteřin a pracuje s DB MySQL). Každá instance skriptu ovlivňuje ty samé data v DB a způsobuje nelogické chování systému (některé dotazy se asi ani neprovedou).
Napsal: čtv 20. říj 2005, 23:22
od Jasper
nekde sem videl javascript kod, kteryy po kliknuti na tlacitko odeslat nasledne toto tlacitko deaktivoval...
tady na teto stranc to tak je reseno, tak si to z tama nejak vyextrahuj...
http://gosms.cz/sms.php
Napsal: pát 21. říj 2005, 14:48
od Dynalon
Ten odkaz
http://gosms.cz/sms.php nějak nefunguje ale i tak řešení v JS je nespolehlivé protože uživatel si může stránku uložit a kód pozměnit - spíš by mě zajímalo jestli neexistuje nějaké řešení v PHP kde to nemá uživatel možnost ovlivnit.
Re: Jak zabránit paralelnímu zpracování PHP skriptu na serve
Napsal: pát 21. říj 2005, 15:17
od next_ghost
Dynalon píše:Dobrý den měl bych dotaz - dá se nějakým jednoduchým způsobem zabránit tomu aby uživatel několikanásobným klepnutím např na tlačítko submit ve formuláři vyvolal ten samý PHP skript? (skript běží zpravidla několik vteřin a pracuje s DB MySQL). Každá instance skriptu ovlivňuje ty samé data v DB a způsobuje nelogické chování systému (některé dotazy se asi ani neprovedou).
Nejsnadnější by asi bylo udělat si v DB tabulku na timeout. Hned na začátku skriptu se zkontroluje, jestli uživatel nemá aktivní timeout a zapíše se novej timeout (třeba 2 vteřiny). Když aktivní timeout neni, skript proběhne, jinak chcípne.
Napsal: pát 21. říj 2005, 16:11
od Jasper
nebo si na strance s formularem nastavis do session nejakou hodnotu a v souboru, ktery zpracovava data provedes kotrolu jestli v session ta hodnota skutecne je a v tom pripade ulozis data a hned tu hodnotu smazes... V pripade ze session nastavena neni, tak presmerujes zpatky na formular...
Napsal: ned 23. říj 2005, 09:34
od Dynalon
next_ghost: řešení ve kterém bych použil DB bych se raději vyhnul, server na kterém ta aplikace běží je hodně vytížený a ve špičce se občas stává že se nepodaří připojit k DB nebo se neprovedou dotazy apod.
Jasper: řešení se session jsem už zkoušel - skript zobrazující formulář a skript zpracovávající data z formuláře je totožný pokud tedy chci využít session musím po uložení hodnoty zavolat funkci session_write_close() která zapíše změny (během provádění skriptu je daná session v rámci skriptu soukromá proměnná) a na konci skriptu zavolám opět session_start() a proměnnou vymažu. Funguje to poměrně spolehlivě ale už se stalo že bylo online 150 uživatelů - nebude to příliš velká zátěž na server pokud se budou muset výše popsané operace provádět pro 150 uživatelů?
Napsal: pon 24. říj 2005, 10:56
od sovicka
Co to udělat naprosto jednoduše přes cookies? (ano, lehce problém s kompatibilitou, ale cookies jsou snad už dnes standardem pro mnoho formulářů)
Při zpracování se vytvoří cookie s časem, kdy naposledy odeslal formulář. Pokud se ho pokusí odeslat dříve, tak mu řekne kdy to bude možné.
Pokud cookie už existuje, tak if ... else zjistí zda je správný čas na to psát další formulář.
Velká výhoda: menší zátěž serveru a client-side úschova dat
Nevýhoda: smaže cookie a jsi namdlenej (ale pokud se o tom nemíníš tak by si ji nemusel všimnout)