That's because sessions are limited to apply only in the domains in which they are set. That's to prevent session IDs accidentally leaking out to other sites (which can't be good), but it does mean that your SSL domain doesn't see the session data in the non-SSL domain, because it never gets the session ID. So the user ends up with two carts: one in the non-secure domain and one on the secure domain.
Now, here's a question: are your SSL and non-SSL domains storing session data in the same place? If they are then what you need to do somehow is pass the session ID across the domain. Since you're using a login form, the first suggestion that comes to mind is a hidden field in the login form that contains the session ID. Then when you're processing the login form, use [man]session_id[/man] to set the ID to the one supplied in the form, so that session_start() reloads the same session instead of creating a new one.
Once the browser is using the same session ID in both domains, you should be able to jump back and forth between them.