stavo provando questo script php che ho scritto

<?
class ProvaPers{
private $numero;
static private $istanza=null;

private function __construct($num){
$this->numero = $num;
}

public function __destruct(){
print("chiamo la serializzazione");
$_SESSION["ProvaPers"] = serialize(self::$istanza);
}

public function getNumero(){
return($this->numero);
}

static public function istanza($num){
if(isSet( $_SESSION["ProvaPers"])){
print("deserializzo");
self::$istanza = unserialize($_SESSION["ProvaPers"]);
unset( $_SESSION["ProvaPers"] );
$_SESSION = Array();
}
elseif (self::$istanza==null){
print("creo");
self::$istanza = new ProvaPers($num);
}
return self::$istanza;
}
}

Session_start();

$a = ProvaPers::istanza("a");
$b = ProvaPers::istanza("b");

print($a->getNumero());
print($b->getNumero());
?>

prova

provandolo funziona poiché stampa "aa" ossia $a e $b puntano allo stesso oggetto. Ma andando su "prova2.php" che contiene lo stesso codice ad eccetto di:

$c = ProvaPers::istanza("c");
$d = ProvaPers::istanza("d");

print($c->getNumero());
print($d->getNumero());

il risultato in output è "cc" come se le var di sessione non ci fossero.. sapete dirmi perché?