Sziasztok!
Nem tartom kezdő programozónak magam mégis felmerült bennem egy kérdés, hogy miként fogja az eredeti session garbage collectiont kezelő program megtalálni és futtatni az általam session_set_save_handler -ben megadott garbage collection kezelő metódust ha singleton a session kezelő osztályom:
<?php
class Session
{
private static $Instance=__CLASS__;
public static function getInstance()
{
if( !is_object(self::$Instance) )
{
self::$Instance = new self::$Instance();
}
return self::$Instance;
}
private function __construct()
{
ini_set('session.save_handler','user');
session_set_save_handler(
array(&$this,'open'),
array(&$this,'close'),
array(&$this,'read'),
array(&$this,'write'),
array(&$this,'destroy'),
array(&$this,'garbage_collection'));
session_start();
}
public function garbage_collection( $iLifeTime=null )
{
// Hulldékgyüjtő kód
}
}
?>
- 1066 megtekintés
Hozzászólások
Ne agyaljatok megvan, hogy miként történik mindez! :) Félreértettem a működését. A user által definiált
garbage_collection is akkor hívódik meg amikor lehívják az oldalt, csak nem minden lehívásnál. Ennek mennyiségét egy 1-100 -ig terjedő szám adja meg ami %-ban értendő.
"A program is never done! by atman"
- A hozzászóláshoz be kell jelentkezni
Természetesen simán működik, le van tesztelve. De a garbage collection-ról megvan a véleményem. Úgyérzem hatásosabb ha az ember ír egy háttér feldolgozót ami elvégzi ezt a feladatot megbízhatóbban.
"A program is never done! by atman"
- A hozzászóláshoz be kell jelentkezni
Szia!
A kod egyaltalan meghivodik valamikor? Mert ha az osztaly inicializalodik, onnantol kezdve mar nincs gond, az objektumreferencia alapjan a runtime tudja, melyik objektumra hivatkozzon (ami neked $this, az neki mas objektumreferencia).
- A hozzászóláshoz be kell jelentkezni
Egy Session::getInstance(); hívásra lefut a konstruktor ezzel beregisztrálja a sessionkezelőket. Ezután az objektum referencia az amelyik a $this is volt elmentődik a korábban az osztály nevét tartalmazó statikus változóba. Soha többet nem fut le a konstruktor a php process alatt. A legközelebbi $oSession=Session::getInstance(); hívásra a statikus metódus a korábban elmentett referenciát adja vissza.
"A program is never done! by atman"
- A hozzászóláshoz be kell jelentkezni