Ho risolto, almeno mi sembra, sto facendo delle prove,

prima di tutto, se esiste, recupero l'oggetto e lo deserializzo

if(isset($_SESSION['cart'])){
$cart=unserialize($_SESSION['cart']);
}

quindi se è un oggetto nulla altrimenti lo creo

if(!is_object($cart)) $cart= new Cart();


eseguo le funzioni che mi servono

...


quindi passo alla sessione l'oggetto serializzato

$_SESSION['cart']=serialize($cart);


Cosi sembra funzionare.

Ma.. teoricamente quando assegno un valore a $_SESSION non lo serializza già lui?
e se mi dicono di non serializzare, significa non fare quello che in realtà ho fatto giusto?
allora perchè cosi funziona e se non serializzo non funziona?