Reputation: 2511
I have a asp.net project with c# code behind. I have a static class called GlobalVariable where I store some information, like the currently selected product for example.
However, I saw that when there are two users using the website, if one changes the selected product, if changes it for everybody. The static variables seem to be commun to everybody.
I would want to create (from the c# code) some kind of session variable used only from the c# code, but not only from the page, but from any class.
Upvotes: 17
Views: 82483
Reputation: 18162
You sort of answered your own question. An answer is in session variables. In your GlobalVariable class, you can place properties which are backed by session variables.
Example:
public string SelectedProductName
{
get { return (string)Session["SelectedProductName"]; }
set { Session["SelectedProductName"] = value; }
}
Upvotes: 11
Reputation: 50855
GlobalVariable
is a misleading name. Whatever it's called, it shouldn't be static
if it's per session. You can do something like this instead:
// store the selected product
this.Session["CurrentProductId"] = productId;
You shouldn't try to make the Session
collection globally accessible either. Rather, pass only the data you need and get / set using Session
where appropriate.
Here's an overview on working with session storage in ASP .NET on MSDN.
Upvotes: 13
Reputation: 164341
Yes static variables are shared by the whole application, they are in no way private to the user/session.
To access the Session object from a non-page class, you should use HttpContext.Current.Session
.
Upvotes: 32