Jak zabránit paralelnímu zpracování PHP skriptu na serveru?
- Dynalon
- Začátečník

-
- Registrován: 27. črc 2005
- Kontaktovat uživatele:
Jak zabránit paralelnímu zpracování PHP skriptu na serveru?
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).
- Jasper
- Středně pokročilý

- Registrován: 25. úno 2004
- Kontaktovat uživatele:
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
tady na teto stranc to tak je reseno, tak si to z tama nejak vyextrahuj...
http://gosms.cz/sms.php
- Dynalon
- Začátečník

-
- Registrován: 27. črc 2005
- Kontaktovat uživatele:
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.
- next_ghost
- Začátečník

-
- Registrován: 12. kvě 2005
- Bydliště: Chomutov
- Kontaktovat uživatele:
Re: Jak zabránit paralelnímu zpracování PHP skriptu na serve
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.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).
- Jasper
- Středně pokročilý

- Registrován: 25. úno 2004
- Kontaktovat uživatele:
- Dynalon
- Začátečník

-
- Registrován: 27. črc 2005
- Kontaktovat uživatele:
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ů?
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ů?
- sovicka
- Středně pokročilý

- Registrován: 17. pro 2003
- Bydliště: východní prágl
- Kontaktovat uživatele:
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)
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)
Francie ... sladká Francie