Hola, lo que yo hago en estos casos es crear una ID que identifique a cada carrito y que sea varible de sesión. Luego los productos los guardo en base de datos en lugar de utilizar variables de sesión.
Por ejemplo tengo esta tabla:
carrito_id | articulo_id | cantidad
y teniendo carrito_id como variable de sesión ya puedo acceder a todos los artículos via consultas...
C00001 | P00001 | 1
C00001 | P00002 | 3
C00001 | P00006 | 2
C00002 | P00001 | 2
C00003 | P00004 | 1
...
Bueno, esa es mi idea de como hacerlo, por supuesto hay mil y una formas distintas y cada uno tendrá su opinión
Salu2,
Avalon