[eluser]Michael Wales[/eluser]
Personally, I wouldn't use a session, I would store it all in the database and store a unique ID in the session (that references that cart).
But, if you really wanted to store it all in the session, you could go this route:
Upon every page-load check for changes to the cart (which will be implemented via a form POST submission of some sort). If there are changes, retrieve the serialized array from the session, store in an unserialized array in the controller, pop on the new item to the array, serialize, and perform a destructive update on the session (overwriting was previously existed in the cart with the new data [which is old cart + new item]).