Scope of static Variable in multi-user ASP.NET web application

50,530

Solution 1

Does static variables retain their values across user sessions?

Yes, that's why you should be VERY careful when you use static variables in a web app. You will run in concurrency issues as more than one thread servicing a request can modify the value of the variable.

While this works in single-user environment, What happens if there are 2 users simultaneously logged in from two computers, User 1 sets the value as 100, then User 2 sets the value as 200. after that user 1 invokes the Get Value button. What will he see as the value?

The user will see 200 afterwards.

Solution 2

Static Variables Scope is Application Level.

If you store something in Static variables, definitely your doing something wrong.

If one user saves the data(In Static variable), Same time another user access same page then he will get the same data(First User saved).

So better you can store the values in **Sessions**.

Solution 3

This would work for you (keep in mind, you need to handle null values/-1):

public static int customerID
{
    get { return session["customerID"] == null? -1 : (int)session["customerID"]; }
    set { session["customerID"] = value; }
}
Share:
50,530
Manas Saha
Author by

Manas Saha

Updated on July 09, 2022

Comments

  • Manas Saha
    Manas Saha almost 2 years

    Does static variables retain their values across user sessions?

    I have a ASP.NET web application where I have two buttons. One for setting the static variable value, another for Showing the static variable value.

    namespace WebApplication1
    {   
    
    public partial class WebForm1 : System.Web.UI.Page
    {
        public static int customerID;
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void ButtonSetCustomerID_Click(object sender, EventArgs e)
        {
            customerID = Convert.ToInt32(TextBox1.Text);
        }
    
        protected void ButtonGetCustomerID_Click(object sender, EventArgs e)
        {
            Label1.Text = Convert.ToString(customerID);
        }
    }
    
    }
    

    While this works in single-user environment, What happens if there are 2 users simultaneously logged in from two computers, User 1 sets the value as 100, then User 2 sets the value as 200. after that user 1 invokes the Get Value button. What will he see as the value?

  • Stan Shaw
    Stan Shaw over 8 years
    You can't access the session variables directly as "Session" from a static get or set accessor. You need to use HttpContext.Current.Session instead.
  • John Mott
    John Mott over 6 years
    can Session variables be configured to use memory? I have a situation where an api consumer doesn't store or retrieve cookies and I don't want a database hit, its for something happening multiple times a second.
  • Lijo
    Lijo over 5 years
    scope of the static variable exist same for multiple users thanks
  • user3776749
    user3776749 over 4 years
    Does this matter if all users need to see the exact same data anyway and the only consideration is seeing whatever is most recent, and the users can't change the data themselves?
  • Mohsen Najafzadeh
    Mohsen Najafzadeh almost 4 years
    This is very dangerous, for concurrent user maybe return session["customerID"] for other user, agree?