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?
Yes, static values will remain same for all users. if one user is updating that value, then it will be reflected to other users as well.
Session variables are a way to store data about a user in a database and retrieve it later. Cookies are a way to store data about a user on the user's computer. Session variables are typically used in applications that need to keep track of a user's activity.
Application variable: it is used for entire application which common for all users. It is not for user specific. this variable value will lost when application restarted. Session variable :- this variable is for user specific. the value of the session is available till the user is logged in.
Session information fields let you add metadata to Sessions to organize them and make it easier to discover patterns during analysis. For example, Session information can contain information about the interview setting, which device or browser was used for the Session or a URL that links to a prototype.
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
They are two very different things.
Any kind of data can be stored in Session. It then must be casted however.But static fields accept data with the correct datatype only.
It's often helpful to abstract Session values with a helper class. This can improve testability and also allows you to strongly type properties and perform the cast in the internals of the class.
Example:
public List<int> UserRoles
{
get
{
// optionally check that the value is indeed in session, otherwise this
// will throw
return (List<int>)Session["UserRoles"];
}
}
See also:
You forget one thing (I think)
Static data will be the same for all users of the application, while session is "per user".
So for your "User Role" scenario, I would expect funny results ;)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With