A cookie stores variables on the visitor's machine.
A session stores the variables on the server and just gives the visitor a cookie with an ID corresponding to those variables. The visitor can never see the variables associated with the session, unless you print them on the page.
Good things about cookies: You can store the information for as long as you like. (Well, I suppose some wouldn't think that is a good thing. 🙂 Sessions generally expire when the browser is shut down.
Good things about sessions: A lot more secure than plain cookies. They can make things automated more easily, since you don't have to fiddle with getting and setting cookies all the time. They can also be used to store a lot of variables at the same time, without having to send it all to the visitor's computer.