[eluser]Aea[/eluser]
Let's get down to the core of the problem and not rely on simple hacky fixes (I'm truly surprised that using double quotes actually works, I'd be willing to bet that's an issue with differences in your levels of error reporting and not an actual fix, if it is than I'm once again disappointed with you PHP).
When you delete your cookies you delete the reference to the $_SESSION created for you (actually it's created based on a high entropy string that your cookie knows). This means that $_SESSION['cart'] does not exist. Now the rest of your code is doing some operations on cart, and it looks like it's checking for a product in your cart and possibly doing some operations on them, there is a check that prevents us going further, but no check that checks for an existing cart hence your error.
There are two ways to approach this problem, but both involve checking whether a card exist, as recommended before...
Code:
$cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : array();
This creates a new cart array. An alternative would be setting $cart to FALSE. Regardless, in both cases you might want to throw an error saying that you have nothing in your cart. I would personally err on the side of setting it to FALSE or even NULL in your check so you don't end up carrying around an unnecessary array() in your session, although the overhead for that would be entirely minimal.
I always use an isset() when accessing parameters which may not exist so I can explicitly check for them being NULL or FALSE later on (your preference, I prefer NULL). This can also save you problems later on, if you want to be extra careful do an isset($var{0}), this will ensure that our $var isn't set to "".
It's good practice to always explicitly check for NULL or FALSE types instead of pseudonulls like "".