Si quitas la @ de session_start() y session_destroy() te da algun mensaje de error o advertencia?
No veo sentido a destruir la sesion y "volver a crearla" para restaurar los datos originales y solo agregar info del usuario, de hecho, no deberias usar session_destroy() hasta que necesites limpiar todos los datos de la sesion, ya sea al completar la compra o cuando el usuario hace click en "finalizar sesion" (logout).
En todo caso, para limpiar variables puedes usar
unset():
unset($_SESSION['total']);