Ik heb in php een eigen sessie systeem gemaakt omdat het standaard systeem niet zo heel erg goed met objecten in combinatie met autoloading overweg kan en ook omdat ik meer op een OOP manier met sessie waarden wil werken.
Ik schrijf de gegevens weg in een file dmv var_export en haal ze de volgende keer weer op met include als hieronder beschreven. de save methode wordt door de destructor uitgevoerd.
Nu heb ik ondervonden dat wanneer ik de pagina te snel herlaad, dat het object nog niet de nieuwste gegevens bevat, maar nog de gegevens van de request van daar voor. Dit heb ik getest door de microtime te setten tijdens elke page refresh.
Nu ben ik beginnen uitzoeken hoe ik dit probleem kan oplossen en heb 1 mogelijke oplossing gevonden, namelijk: een lock op de file zetten.
Hiervoor heb ik 2 uitwerkingen:
Bij beide zou ik voor het lezen en voor het schrijven een lock van de file eisen.
1: Zelf een .lock bestand plaatsen en controleren of dit bestaat.
2: via de flock functie
Maar nu is mijn vraag, is dit wel een goede oplossing?
Indien ja: Welke van de 2 is dan te verkiezen?
Indien nee: Is er een andere manier om dit probleem te verhelpen?
Alsook: Waardoor komt het nou eigenlijk dat dit voorkomt bij mij en niet met $_SESSION? Duurt var_export veel langer dan serialize?
Tijdens het typen van deze post ben ik gestoten op unserialize_callback_func. Kan dit werken met sessions als ik een autoloader daarin definieer?
Ik schrijf de gegevens weg in een file dmv var_export en haal ze de volgende keer weer op met include als hieronder beschreven. de save methode wordt door de destructor uitgevoerd.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| <? public function load(){ if(file_exists($this->fileName)){ //TODO: insert thread safety $this->data = include $this->fileName; if(is_array($this->data)) return true; else{ $this->data = array(); return false; } }else return false; } public function save(){ if(!file_exists($this->fileName)){ // create file // chmod to read/write // throw exception } $data = '<?php'.PHP_EOL.'return '.var_export($this->data,true).';'.PHP_EOL.'?>'; //TODO: insert thread safety by creating lock file return file_put_contents($this->fileName, $data); } ?> |
Nu heb ik ondervonden dat wanneer ik de pagina te snel herlaad, dat het object nog niet de nieuwste gegevens bevat, maar nog de gegevens van de request van daar voor. Dit heb ik getest door de microtime te setten tijdens elke page refresh.
Nu ben ik beginnen uitzoeken hoe ik dit probleem kan oplossen en heb 1 mogelijke oplossing gevonden, namelijk: een lock op de file zetten.
Hiervoor heb ik 2 uitwerkingen:
Bij beide zou ik voor het lezen en voor het schrijven een lock van de file eisen.
1: Zelf een .lock bestand plaatsen en controleren of dit bestaat.
2: via de flock functie
Maar nu is mijn vraag, is dit wel een goede oplossing?
Indien ja: Welke van de 2 is dan te verkiezen?
Indien nee: Is er een andere manier om dit probleem te verhelpen?
Alsook: Waardoor komt het nou eigenlijk dat dit voorkomt bij mij en niet met $_SESSION? Duurt var_export veel langer dan serialize?
Tijdens het typen van deze post ben ik gestoten op unserialize_callback_func. Kan dit werken met sessions als ik een autoloader daarin definieer?