多用户ASP中静态变量的作用域.. NET web应用程序

本文关键字:作用域 NET web 应用程序 变量 ASP 静态 多用户 | 更新日期: 2023-09-27 17:50:44

静态变量是否在用户会话期间保持其值?

我有ASP。. NET web应用程序,我有两个按钮。一个用于设置静态变量值,另一个用于显示静态变量值。

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 Value按钮之后。他认为价值是什么?

多用户ASP中静态变量的作用域.. NET web应用程序

静态变量是否在用户会话中保持其值?

是的,这就是为什么当你在web应用中使用静态变量时你应该非常小心的原因。你将在并发问题中运行,因为多个线程服务于一个请求可以修改变量的值。

虽然这在单用户环境下工作,但如果有2个用户同时从两台计算机登录,用户1设置值设为100,然后用户2将值设为200。在用户1之后调用获取值按钮。他认为价值是什么?

用户之后会看到200

静态变量作用域为应用级。

如果你在静态变量中存储一些东西,肯定是你做错了什么。

如果一个用户保存数据(在静态变量中),同一时间另一个用户访问同一页面,那么他将获得相同的数据(第一个用户保存)。

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

这将为您工作(请记住,您需要处理空值/-1):

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

不要为属性使用static,否则它会工作:

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