I\'ve done a booking application done using CakePHP which involves a few steps before the checkout page. In between these steps I store the information in the session.
You could mark a session as started when step 1 is first started. Make sure server-side that they follow the right steps (i.e. they don't return to step 1 after step 1 has been completed unless they specifically click a link to do so.) Basically, track their current step on the server and update it as needed. In the event the user does something unexpected, you could give them the option to start over.
I'm wondering if hidden fields with timestamps on your forms might help. Kinda the same idea though.
Caveat: this process might break the essence of your browser's back button. I hate myself for letting that happen in one of my projects.
For cross-browser support, you'd need to have it associated with a user account or something that persists.