繁体   English   中英

多用户 ASP.NET Web 应用程序中静态变量的范围

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

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

我有一个 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 调用“获取值”按钮之后。 他会看到什么价值?

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

是的,这就是为什么在 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; }
}

不要对属性使用静态然后它工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM