From this slideshow http://slides.html5rocks.com/#slide8 and from Chrome: View > Developer > Developer Tools > Storage tab,
I learned that there are at least 4 types of browser storage: Databases, Local Storage, Session Storage, Cookies (are there more?)
What are the differences? When should I use one over the other?
For example, if a site wants to store user preferences, which storage method should the site tell the browser to use?
They are all browser-side storage to provide offline/cache mechanisms to web apps/sites:
Maybe you'll also hear soon about IndexedDB (now supported on IE 10, FF, and Chrome) which is a kind of local/sessionStorage but which you can use to store javascripts objects instead of only strings.