Dobrý den, měla bych následující dotaz.
Na stránkách sosvet.wz.cz jsem vytvořila "aplikaci", přes kterou se studenti naší školy přihlašovali k ročníkovým pracem. Při testování jsme s kolegou nenašli žádný problém, ale při ostrém spuštění aplikace nefungovala tak, jak jsme si představovali.
Z databáze se načítá seznam témat. Pokud není nikdo vlatníkem (v databázi mám nastaveno non), objeví se tlačítko pro přihlášení. Pokud je téma rezervováno (něco jiného než non), objeví se jméno vlastníka. Přihlašování jsme stanovili od pátku 15.6. 22:00. Žáci se přihlásili a prý jim to v seznamu ukázalo i jejich login, ale při opětovné kontrole po cca 20 min. zjistili, že místo jejich jména tam byl login někoho jiného.
Jeden z rodičů poradil, že info najdu v příslušném logu. Předpokládám tedy, že existuje nějaký log file s přístupy, ale nejsem IT programátor a nevím, kde něco takového hledat či kde hledat chybu samotnou.
Prosím, poraďte. Děkuji!
Scénář byl asi takový: Všichni si naráz zobrazili seznam s tlačítky. Potom si někdo zvolil téma. Ostatní si stále četli seznam a pak někdo další kliknul na stejné tlačítko jako ten předchozí (mezitím nezmizelo). Tím přemazal původního vlastníka.
Říká se tomu race condition, česky souběh. V daném případě se musí při zápisu nového vlastníka do databáze přidat podmínka prázdného jména. Asi takto:
UPDATE tabulka SET vlastnik=$novy_vlastnik WHERE id=$id_ulohy AND vlastnik IS NULL;
Ten dotaz není napsán přesně, je zranitelný, slouží jen pro vysvětlení principu.
Tolik mi říká má křišťálová koule. Do aplikace nevidí.