OK so you are selling stuff: so you need to be as slick as possible. So the answer we worked out back in '96 is still the answer.
You need to be as simple to use as possible.
You need to make taking their money as easy as possible.
You do not want to raise any unneccessary barriers.
You do not want to let them think twice.
You know that the technology is unreliable: it is up to you to deal with that problem, not the user.
FORGET ABOUT SESSIONS.
Use a permanent cookie to track them.
Do not expect or require them to register or login untill AFTER you have taken the money.
Store all information in the database so that they never have to re-enter any of it.
Allow them to edit that information whenever they wish.
TAKE THE MONEY AND WORRY ABOUT THE DATA AFTERWARDS.
Now, for example, I currently work for a firm that outsources overdue accounts for large corporations:we sell bad debts, and anyone can buy them.
So I do no validation of user input before pasing them on to our payment processor. Invalid email? Who cares. No account number? Their problem. If they are too dumb to input the ref we supply then it is their fault if it takes us a long time to credit the right account. No contact information? Well, we've got the money and can wait untill they contact us. We have no risk cos we have nothing to loose. Of course, our payment processor is going to validate the card information properly, that is what we pay them for.
Now, I doubt that you are in quite that situation. You want to provide great customer service, and you are at risk. But the main issue still applies: take the money and worry about the other stuff once you've got it.
So, use a permanent cookie to recognise them.
Store all input in the database linked via the cookie data. If they delete the cookie then tough luck, they will have to re-enter something, but make it minimal.
Now you can still service them from page to page even if they break off half way through, or drop their connection, which was more the issue back in the '90s.
It is not 'a courtesy' to remember their details, it is essential business common-sense. Remember, untill you have the money the customer is King.
Now, how do you repopulate the form data? Have a look at my post in this thread 3rd post down.