in realtà non è che quello non funziona, perchè il codice è corretto e se Cart() ritornasse qualcosa allora la sessione verrebbe inizializzata; il problema è che nella tua classe perdi i valori
perchè non so, (e ribadisco, non so) se i valori della classe una volta modificati hanno valore sempre o solo quando viene chiamata la classe.
Cioè,

$vecchio = 0
$nuovo = 0 ad inizio classe

$this->vecchio=$this->nuovo;
$this->nuovo=$v;

quando chiami la classe la seconda volta, come fa a ricordarsi che $vecchio non è più 0 ma è cambiato?
ma ripeto, magari sbaglio e una volta che cambi una variabile nella classe mantiene quel valore...