[PHP] Gelockte session blijft hangen

Pagina: 1
Acties:
  • 197 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021
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). }:O

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.
do.php ziet er ruwweg zo uit:
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.


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Ja, wanneer je een session_write_close doet is de session lock weg. Dat betekend dat gedurende de gebruikers actie de sessie opnieuw geopend kan worden door een page reload. Je kan dus beter de sessie pas sluiten aan het einde van het script.

Acties:
  • 0 Henk 'm!

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021
Sorry, maar hoe leidt dat precies tot een hangende sessie in dit geval? Ik zorg er juist expres voor dat de sessie zo kort mogelijk geopend wordt, om te voorkomen dat de lock te lang bestaat.

Hey, I came here to be drugged, electrocuted and probed, not insulted.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

lees de documentatie maar eens goed, want ik zie ook niet waarom je 2x op 1 pagina session_start() uitvoert.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021
Ik open de sessie twee keer, zo kort mogelijk, om te zorgen dat de sessie niet de hele tijd gelockt staat. Het script duurt soms vrij lang, en ik dacht dat dat nu juist het probleem was. Dus heb ik de tijd dat de sessie geopend wordt zoveel mogelijk teruggedrongen.

NB. De sessie blijft overigens net zo hard hangen als ik de sessie vanaf begin tot einde open houdt.

Hey, I came here to be drugged, electrocuted and probed, not insulted.


Acties:
  • 0 Henk 'm!

Verwijderd

Is het verplicht om als geregistreerde gebruiker in te loggen met een browser die Javascript enabled is? Zo ja, dan zou ik middels Javascript het snel achter elkaar klikken opvangen (if previous click time is less then x-ammount of milliseconds -> void click).

Acties:
  • 0 Henk 'm!

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021
Javascript is nog niet een vereiste, maar ik doe er wel steeds meer mee. Het is op zich een redelijke workaround, die je hebt bedacht. Ik zal daar in ieder geval wel even aan gaan knutselen. Maar mijn voorkeur gaat uit naar het verhelpen van het probleem aan de serverzijde. :p

Hey, I came here to be drugged, electrocuted and probed, not insulted.


Acties:
  • 0 Henk 'm!

Verwijderd

Haploid schreef op woensdag 28 december 2005 @ 16:22:
Javascript is nog niet een vereiste, maar ik doe er wel steeds meer mee. Het is op zich een redelijke workaround, die je hebt bedacht. Ik zal daar in ieder geval wel even aan gaan knutselen. Maar mijn voorkeur gaat uit naar het verhelpen van het probleem aan de serverzijde. :p
Ik zou Javascript verplicht stellen.
Daarnaast, waarom maak je geen gebruik van AJAX? Dan ben je in ieder geval van de zichtbare refreshes af die het spel op het moment erg `traag` maken.

Acties:
  • 0 Henk 'm!

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021
Wie of wat is AJAX?

Kan wel gaan googlen, maar zal nogal wat hits opleveren :P

[ Voor 62% gewijzigd door Haploid op 28-12-2005 16:34 ]

Hey, I came here to be drugged, electrocuted and probed, not insulted.


Acties:
  • 0 Henk 'm!

Verwijderd

Haploid schreef op woensdag 28 december 2005 @ 16:33:
Wie of wat is AJAX?
Kan wel gaan googlen, maar zal nogal wat hits opleveren :P
U bent rond kerst uit een ei gekropen begrijp ik?
/grapje

AJAX is een benaming voor het gebruik van een combinatie van een aantal technieken. Wikipedia kan je er alles over vertellen. Er staan talloze voorbeelden die je duidelijk kunnen maken wat het doet. Tevens doet een blik werpen op de gebruikersinterface van Gmail je een beeld vormen wat je nu precies met AJAX kunt doen.

Rest te melden dat het eigenlijk een hype-je is en dat het niets anders is dan het combineren van een aantal reeds bestaande technieken waarmee je de gebruiker soepeler laat browsen.

Acties:
  • 0 Henk 'm!

  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021
Zo doorlezende is dit AJAX gebeuren ongeveer waar ik uiteindelijk naar toe wil werken. Bedankt voor de info, zo heb ik een beetje een aangrijppunt hoe ik deze techniek kan inbouwen, zonder dat ik zelf het wiel hoef te bedenken. _/-\o_

Dit project is mijn eerste serieuze ervaring met PHP, HTML en Javascript. Ik ben al vrij tevreden over hoe gemakkelijk het was om op te zetten. Volgende versie wordt het inbouwen van XML waarschijnlijk de grote stap.

Voor nu zit ik echter nog met het sessions probleem. :(

Hey, I came here to be drugged, electrocuted and probed, not insulted.


Acties:
  • 0 Henk 'm!

Verwijderd

Haploid schreef op woensdag 28 december 2005 @ 17:04:
Zo doorlezende is dit AJAX gebeuren ongeveer waar ik uiteindelijk naar toe wil werken. Bedankt voor de info, zo heb ik een beetje een aangrijppunt hoe ik deze techniek kan inbouwen, zonder dat ik zelf het wiel hoef te bedenken. _/-\o_

Dit project is mijn eerste serieuze ervaring met PHP, HTML en Javascript. Ik ben al vrij tevreden over hoe gemakkelijk het was om op te zetten. Volgende versie wordt het inbouwen van XML waarschijnlijk de grote stap.

Voor nu zit ik echter nog met het sessions probleem. :(
Als gebruikers geen Javascript enabled hebben, dan een melding geven dat ze op eigen risico gebruik kunnen maken van het spel. Als ze het wel hebben, mijn eerst aangedragen oplossing gebruiken.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Mja, ik zou toch eerst eens dit fundamentele issue uitzoeken en oplossen. Want wat je beschrijft hoort niet echt, en de aangedragen javascript oplossing is symptoombestrijding.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Verwijderd

Grijze Vos schreef op donderdag 29 december 2005 @ 12:37:
Mja, ik zou toch eerst eens dit fundamentele issue uitzoeken en oplossen. Want wat je beschrijft hoort niet echt, en de aangedragen javascript oplossing is symptoombestrijding.
Daar heb je zeker gelijk in.
Ik kan me heel vaag herinneren dat ik precies hetzelfde probleem heb gehad. Ik weet niet meer of ik toen met sessies werkte maar feit was wel dat een applicatie rare kuren vertoonde door erg snel klikken achter elkaar. Helaas weet ik niet meer wat de oplossing was toen.
Pagina: 1