Подтвердить что ты не робот

Область статической переменной в многопользовательском веб-приложении ASP.NET

Сохраняют ли статические переменные свои значения в пользовательских сеансах?

У меня есть веб-приложение ASP.NET, где у меня есть две кнопки. Один для установки значения статической переменной, другой для отображения значения статической переменной.

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);
    }
}

}

Пока это работает в среде с одним пользователем. Что произойдет, если на двух компьютерах одновременно зарегистрировано 2 пользователя, Пользователь 1 устанавливает значение 100, тогда Пользователь 2 устанавливает значение 200. После этого пользователь 1 вызывает Get Кнопка значения. Что он увидит в качестве значения?

4b9b3361

Ответ 1

Сохраняет ли статические переменные свои значения в пользовательских сеансах?

Да, почему вы должны быть ОЧЕНЬ осторожны, когда используете статические переменные в веб-приложении. Вы будете запускать в concurrency проблемах, поскольку несколько потоков, обслуживающих запрос, могут изменять значение переменной.

Пока это работает в среде с одним пользователем, что происходит, если есть 2 пользователя, одновременно вошедшие в систему с двух компьютеров, пользователь 1 устанавливает значение 100, тогда Пользователь 2 устанавливает значение 200. После этого пользователь 1 вызывает кнопку Get Value. Что он увидит в качестве значения?

После этого пользователь увидит 200.

Ответ 2

Статические переменные Область - это уровень приложения.

Если вы храните что-то в статических переменных, то делаете неправильно.

Если один пользователь сохраняет данные, в то же время, когда другой пользователь обратился к той же странице, он также получит те же данные. Поэтому вы можете сохранить значения в Сессии.

Ответ 3

Это сработает для вас (имейте в виду, вам нужно обрабатывать нулевые значения /-1):

public static int customerID
{
    get { return session["customerID"] == null? -1 : (int)session["customerID"]; }
    set { session["customerID"] = value; }
}

Ответ 4

Не используйте static для свойства, затем он работает:

public int customerID
{
    get { return Session["customerID"] == null? -1 : (int)Session["customerID"]; }
    set { Session["customerID"] = value; }
}