Ola,

Weet iemand toevallig hoe een sessie precies werkt?

Het begint met session_start(). Dan wordt er een sessie-bestand op de server geplaatst.

Vervolgens kun je bijv. dit doen:

$_SESSION['beest'] = 'koe';

Dit wordt dan in het sessiebestandje opgeslagen.

Wat ik me nu afvraag is dit.

Als ik dit doe:

$_SESSION['beest'] = 'koe';

wordt dit dan meteen in het sessie-bestand opgeslagen? Dus stel ik doe dit:

$_SESSION['beest'] = 'koe';

hier wat code tussendoor...

$_SESSION['auto'] = 'opel';

hier nog weer wat code...

$_SESSION['user'] = 'piet';

Vinden er nu dan 3 "schrijf-acties" plaats? Of wordt aan het eind van de rit éénmalig de complete $_SESSION array opgeslagen in het sessie-bestand? (Door middel van een soort destruct functie of iets dergelijks).
Nee. De write functie van de session save handler (die je ook zelf kan definieren) wordt aangeroepen wanneer PHP in het shutdown process zit van een script. Meestal is dat wanneer alles naar de output buffer geschreven is. Je kunt het schrijven ook handmatig initiereren door session_write_close() aan te roepen maar dat zou ik niet doen zonder een goede reden.

Om dat de write functie van de session save handler pas aangeroepen wordt als de output buffer is geschreven heeft het dus ook geen zin om te debuggen met var_dump of echo want dat zal nooit te zien zijn in de browser. PHP bepaalt zelf wanneer het script gestopt is om deze functie aan te roepen je hoeft je daar in ieder geval geen zorgen om te maken.

Mocht je veel met sessies doen (wat wel code smell is meestal) en veel file I/O wilt voorkomen kijk dan eens naar Memcached of Redis ;)
Dankjewel Kees! Ik vermoedde al dat het ongeveer op zo'n manier zou werken. Het had me al vreemd geleken als telkens wanneer ik iets in $_SESSION zou zetten, direct ook het sessie-bestand zou worden aangepast. Maar dat is nu helemaal helder. Top!

Reageren