다중 사용자 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
'programing' 카테고리의 다른 글
이름에 점(.)이 있는 PowerShell 환경 변수 (0) | 2023.07.31 |
---|---|
CheckBox 색상을 변경하는 방법은 무엇입니까? (0) | 2023.07.31 |
모든 패키지에 대해 'pip 설치'가 실패함("요구 사항을 충족하는 버전을 찾을 수 없음") (0) | 2023.07.31 |
PL/SQL에 "LIKE %"(예: "variable %")가 있는 변수를 사용하시겠습니까? (0) | 2023.07.31 |
모델 클라이언트 유효성 검사 규칙 (0) | 2023.07.31 |