You can tack in variables into both the viewstate and the session "arrays".
Watch out for name consistency when you retrieve it or the code will execute
but not work (storing Session["Somevalue"] and accidentally retrieving
Session["Somvalue"] can leave you scratching your head) Either one can be
very handy for small-scale applications. On a larger scale, they can both
affect design and performance.
Using viewstate with too much information (like storing a full dataset in
it) will slow things down as it is transmitted back and forth from the server
every time. Viewstate will already contain all of the context information for
all of the controls on a page so it may affect performance. Since it is
stored on the page (and sent back and forth) it could be vulnerable to
interception/retrieval.
Using session can limit the expandability of the application since it
requires either a session server or a SQL database to maintain sessions over
multiple servers (webfarms, etc.). There are also security concerns with
session-hijacking too but again they are both easy to use for simple,
small-scale, applications.