<plagiarize>
There are also three different ways where session state can be stored:

  1. On the web server itself ("In process")
  2. On another machine in memory ("state server")
  3. In SQL Server

It is recommended by many people that if you want session state to be usable in a load balanced environment then you need to choose option 2 or 3. If you want this session state to persist in the event of a server hiccup then you need to use option 3, SQL Server. This has some benefits (persistence of data, usable in a load balanced environment) but some distinct disadvantages (slower than the other two options and it requires objects to be serializable).
</plagiarize>

What surprised me is that the same session state database that was used for .NET 1.1 cannot be used for session state in .NET 2.0. So, in order to use session state with .NET 2.0 you will need to separate state databases.

<plagiarize>
Theoretically .NET 1.0 and 1.1 web apps can use the .NET 2.0 database for storing state, but this has not yet been tested.
</plagiarize>

*NOTE: plagiarism comes from Donald Jessop of Alberta Education fame