[PHP] Sessie.onDestroy achtig iets?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Av3ng3rtje
  • Registratie: December 2002
  • Laatst online: 18-08 10:15
Hallo,

Ik ben bezig met een website waar gebruik wordt gemaakt van een gebruikerssysteem. Je kan inloggen via een pagina die een gebruikersobject opslaat in een sessie ($_SESSION).

Nu handel ik de sessies af door gebruik te maken van: session_set_save_handler. Ik heb de verschillende functies geimplementeerd. Mijn systeem maakt gebruik van een mysql database om de sessies op te slaan.

Echter het probleem is met $_SESSION dat er geen event valt aan te binden is als de sessie wordt vernietigd. Wel via session_destroy, maar niet meteen als je de browser sluit (garbage collection is een kans berekening?). Ik wil het eigenlijk zo hebben dat PHP meteen reageert op het sluiten van de browser.

In mijn huidige implementatie deserialize ik de sessie data vanuit de database. Als er een gebruikers object wordt gevonden kan er gekeken worden door middel van een kolom in de database wanneer de sessie het laatst is geupdate en kan ik hier mee de kolom last_visit updaten van het gebruikersobject.

Echter dan zit je met het probleem dat de garbage collection wordt getriggert door een kans berekening. De kans zou je natuurlijk kunnen verhogen, maar dat is niet wat ik zoek. Nu zou ik het ook kunnen oplossen door contineu een veld (last_visit_2) te maken. Daar in contineu de datum van de gebruiker op te slaan als hij/zij een pagina bezoekt. Vervolgens bij het inloggen last_visit2 in lastvisit te zetten, maar ik ben toch benieuwd of er nog mensen zijn die ook tegen een soort gelijk probleem zijn aangelopen. In ASP is het mogelijk om via een apart bestand een functie te implementeren het session_destroy event implementeert.

Ik ben benieuwd naar jullie oplossingen/bevindingen hierover.

[ Voor 12% gewijzigd door Av3ng3rtje op 24-11-2008 00:07 ]


Acties:
  • 0 Henk 'm!

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

Serverside is dat volgens mij echt niet mogelijk. Wat wel zou kunnen doen, clientside bijvoorbeeld om de 20 seconden oid via AJAX ff de server porren. Gebeurt dat niet is er geen client meer. Of je doet iets met het unload event van javascript welk wordt getriggerd als de browser sluit? Dan nog kunnen mensen JS uit hebben staan of de internetverbinding verbreken alvorens de browser te sluiten. Waterdicht krijg je het niet. Tenminste niet voor zover ik weet maar ik ben benieuwd. Misschien iemand anders? Ik zie meer heil in zorgen dat je sessie zo safe mogelijk is.

Aunt bunny is coming to get me!


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Er is, uiteraard, geen serverside session destroy event als een user zijn browser sluit. Immers, hoe moet de server weten wat een client doet nadat de verbinding is gesloten?

Wat je wel kan doen is de session.cookie_lifetime op 0 zetten (wat hij standaard ook is), hiermee wordt een sessie automatisch aan de client kant vernietigd zodra iemand z'n browser sluit. Bij een volgende pageview kun je dan simpelweg controleren of er een sessie aanwezig was.

Het preciese moment bepalen wanneer iemand z'n browser sluit lukt je daarmee niet, daarvoor zul je of een XHR aan een body.onUnLoad moeten koppelen, iets als COMET implementeren of gaan pollen - wat ook niet ideaal is.

Ik snap echter niet wat het nut hiervan zou kunnen zijn; als je een sessie wilt laten vervallen als iemand de pagina verlaat hoef je enkel z'n lifetime op 0 te laten staan, en als je wilt kijken hoeveel actieve sessies er zijn ben je al klaar door een timestamp van een last-visit bij te houden. Na elke pageview wordt standaard de session_write method aangeroepen, als je je eigen session handler hebt geschreven is het een eitje om behalve de inhoud dan ook de datum te updaten in je DB - ik hanteer zelf doorgaans iets van 10 minuten voor actieve sessies, accuraat genoeg voor de meeste toepassingen :) Een oude session handler van mij staat hier omschreven, inclusief source van een handler die onder andere actieve sessies kan tellen.

[ Voor 6% gewijzigd door FragFrog op 24-11-2008 02:17 ]

[ Site ] [ twitch ] [ jijbuis ]