So far I've been using Session to pass some variables from one page to another. For instance user role. When a user logs in to the web application the role id of the user is kept in Session and that role is checked at different parts of the application. I've recently started thinking why not use static members instead. I can store the same information in a static field and easily access it anywhere in my application (well anywhere the namespace in which that static field resides is included.) I know that using Session variables comes handy sometimes, such that:
Apart from the above, are there any other reasons why I should not use static fields to store data and have it available everywhere?
No, using static variables for this is not the way to go:
Fundamentally, you have two choices for propagating information around your application:
If you can use load-balancing to keep all users going to the same server, and if you don't mind sessions being lost when the AppDomain is recycled1 or a server going down, you can keep it in memory, keyed by session ID... but be careful.
1 There may be mechanisms in ASP.NET to survive this, propagating session information from one AppDomain to another - I'm not sure