programing

다중 사용자 ASP의 정적 변수 범위.NET 웹 애플리케이션

instargram 2023. 7. 31. 21:03
반응형

다중 사용자 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);
    }
}

}

단일 사용자 환경에서 이 작업이 작동하는 동안 두 컴퓨터에서 동시에 로그인한 사용자가 두 명인 경우, 사용자 1이 값을 100으로 설정한 다음 사용자 2가 값 가져오기 버튼을 호출한 후 값을 200으로 설정하면 어떻게 됩니까?그는 그 가치를 무엇으로 볼 것입니까?

정적 변수는 사용자 세션 전반에 걸쳐 값을 유지합니까?

네, 그렇기 때문에 웹 앱에서 정적 변수를 사용할 때는 매우 조심해야 합니다.요청을 처리하는 둘 이상의 스레드가 변수 값을 수정할 수 있으므로 동시성 문제가 발생할 수 있습니다.

단일 사용자 환경에서 이 작업이 작동하는 동안 두 컴퓨터에서 동시에 로그인한 사용자가 두 명인 경우, 사용자 1이 값을 100으로 설정한 다음 사용자 2가 값 가져오기 버튼을 호출한 후 값을 200으로 설정하면 어떻게 됩니까?그는 그 가치를 무엇으로 볼 것입니까?

사용자는 이후에 200개를 볼 수 있습니다.

정적 변수 범위는 응용 프로그램 수준입니다.

정적 변수에 무언가를 저장하면 분명히 잘못된 것입니다.

한 사용자가 데이터를 저장하면(In Static variable), 동일한 시간에 다른 사용자가 동일한 페이지에 액세스하면(First User saved) 동일한 데이터를 얻게 됩니다(First User saved).

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

이 방법은 다음과 같습니다(null 값/-1을 처리해야 함).

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

속성에 정적을 사용하지 마십시오. 그러면 작동합니다.

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

언급URL : https://stackoverflow.com/questions/14154892/scope-of-static-variable-in-multi-user-asp-net-web-application

반응형