Ik heb de afgelopen anderhalve maand een browserbased spel in elkaar geknutseld ( http://www.jailriot.net/ ), in PHP4 met een MySQL 4.0 database erachter. In dat spel gebruik ik sessions om bij te houden als welke speler iemand ingelogd is en nog een paar andere interface gerelateerde zaken (zoals welk wapen er het laatst gebruikt is).
Alles gaat prima, totdat een gebruiker ongeduldig wordt en te snel achter elkaar klikt. Dan heeft ie kans dat het spel compleet unresponsive wordt. Als dat gebeurt, dan kan je alleen maar door als je eerst je cookie weggooit en de browser opnieuw opstart. Of je kunt ook een uur wachten.
Dit gebeurt alleen op pagina's waarbij de sessie opnieuw wordt geopend. De FAQ pagina bijvoorbeeld is altijd toegangelijk, want die doet niets met sessies. Het lijkt mij in ieder geval duidelijk dat sessies de boosdoener zijn. Ergens heb ik iets fouts of slordigs gedaan. Maar wat precies, dat is me niet duidelijk. Ik heb al een paar dozijn PHP forums doorgestruind op zoek naar dit specifieke probleem, en ik heb de documentatie van PHP.NET meerdere malen doorgelezen.
De belangrijkste pagina's in mijn spel zijn index.php en do.php.
De sessie wordt dus twee keer voor een heel kort moment geopend. Het lijkt mij dat daar geen conflicten in kunnen ontstaan, of althans niet vaak. Maar je krijgt de gelockte situatie bijna elke keer dat je te snel klikt.
Iemand enig idee?
Alles gaat prima, totdat een gebruiker ongeduldig wordt en te snel achter elkaar klikt. Dan heeft ie kans dat het spel compleet unresponsive wordt. Als dat gebeurt, dan kan je alleen maar door als je eerst je cookie weggooit en de browser opnieuw opstart. Of je kunt ook een uur wachten.

Dit gebeurt alleen op pagina's waarbij de sessie opnieuw wordt geopend. De FAQ pagina bijvoorbeeld is altijd toegangelijk, want die doet niets met sessies. Het lijkt mij in ieder geval duidelijk dat sessies de boosdoener zijn. Ergens heb ik iets fouts of slordigs gedaan. Maar wat precies, dat is me niet duidelijk. Ik heb al een paar dozijn PHP forums doorgestruind op zoek naar dit specifieke probleem, en ik heb de documentatie van PHP.NET meerdere malen doorgelezen.
De belangrijkste pagina's in mijn spel zijn index.php en do.php.
- index.php interface van het spel.
- do.php ontvangt de post data van alle knoppen, doet iets (bewegen, aanvallen, etc) en redirect vervolgens terug naar index.php.
PHP:
1
2
3
4
5
6
7
8
9
10
| session_start(); // controleer of gebruiker ingelogd is (lezen) session_write_close(); // voer de actie uit (beweeg gebruiker, etc.) session_start(); // schrijf aantal dingen naar sessie (laatste actie etc.) session_write_close(); header("Location: ."); |
De sessie wordt dus twee keer voor een heel kort moment geopend. Het lijkt mij dat daar geen conflicten in kunnen ontstaan, of althans niet vaak. Maar je krijgt de gelockte situatie bijna elke keer dat je te snel klikt.
Iemand enig idee?
Hey, I came here to be drugged, electrocuted and probed, not insulted.