Some other important considerations:
Hosting: If they host, you're essentially losing control and use of the code unless its in writing otherwise. For instance, if they pay for hosting and don't pay you the final bill more than likely it's not legal to turn the site off. If you're hosting and the site goes down, be prepared to work nights, weekends, holidays, and while you're sick if a server goes down or the site gets hacked. The burden never goes away. The policy I most often follow is that the client is in charge of hosting, but I offer to purchase it (in their name) set it up, and immediately hand over passwords so they're in control.
Get at least some payment up front. It proves that both parties are serious. I personally do between 25-50% depending on the client.
If it seems like a site that could get out of hand quickly or a client that's hands on, consider going hourly. It will ensure you get paid for what you work. You can always "give them a few hours" if they are good to work with, but legally they will have a much harder time not paying you for hours worked in this scenario. Not so much if you bill a set cost then try to go after "extra" work hours without some sort of formalized change request order.
Spell out support and training in writing. This can be deadly if you miss it. I once had a client that expected me to give him 30 minutes to an hour every other day after the site was done and delivered, plus email support and even virus recovery on his personal pc. Some clients know no boundaries. If this was to happen, communicate your delimma (I can't afford to give you free service) offer an alternative (support at $xx/hour) and if they don't agree, politely offer to help them find an alternative (sucker).
Finally, give a warranty. This shows your serious, and makes you a stand-up programmer. I personally guarantee that every site I deliver will 100% meet w3c standards upon delivery (not applicable to poorly formatted CMS content), and I will fix any code built under scope that causes an error. I've had to put in a few hours here and there, but this has never burned me and has gotten me a ton of referral business.
With all things including contract, it's just important to be up front, honest, and thorough. Like Tim said, if you don't plan for something and it gets out of hand, be ready to eat the extra work. But do stand up for yourself if the client is wrongfully taking advantage of you.