Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net会话变量_C#_Asp.net_Session Variables - Fatal编程技术网

C# Asp.net会话变量

C# Asp.net会话变量,c#,asp.net,session-variables,C#,Asp.net,Session Variables,我有一个asp.net项目,后面有c#代码。我有一个名为GlobalVariable的静态类,我在其中存储一些信息,例如当前选择的产品 然而,我看到,当有两个用户使用该网站时,如果其中一个用户更改了所选的产品,如果每个人都更改了该产品。静态变量似乎对每个人都是公共的 我想(从c#代码)创建某种会话变量,只从c#代码中使用,但不仅从页面,而且从任何类中使用。是的,静态变量由整个应用程序共享,它们对用户/会话都不是私有的 要从非页面类访问会话对象,应使用HttpContext.Current.Ses

我有一个asp.net项目,后面有c#代码。我有一个名为GlobalVariable的静态类,我在其中存储一些信息,例如当前选择的产品

然而,我看到,当有两个用户使用该网站时,如果其中一个用户更改了所选的产品,如果每个人都更改了该产品。静态变量似乎对每个人都是公共的


我想(从c#代码)创建某种会话变量,只从c#代码中使用,但不仅从页面,而且从任何类中使用。

是的,静态变量由整个应用程序共享,它们对用户/会话都不是私有的


要从非页面类访问会话对象,应使用
HttpContext.Current.Session

GlobalVariable
是一个误导性名称。不管它叫什么,如果它是每个会话,就不应该是静态的。您可以这样做:

// store the selected product
this.Session["CurrentProductId"] = productId;
您也不应该尝试使
会话
集合可以全局访问。相反,只传递您需要的数据,并在适当的情况下使用
Session
获取/设置数据


以下是有关MSDN使用的概述。

您回答了自己的问题。答案在会话变量中。在GlobalVariable类中,可以放置由会话变量支持的属性

例如:

public string SelectedProductName 
{
    get { return (string)Session["SelectedProductName"]; }
    set { Session["SelectedProductName"] = value; }
}

@Mathieu记得检查null,因为不会总是为每个请求创建会话。例如,默认情况下不会设置简单的处理程序(如.ashx文件中的处理程序)来创建会话对象。顺便说一句,感谢您提供了一个如何使用会话的示例。在整个应用程序中都可以访问静态变量。会话用于存储和访问用户登录和注销中的变量。使用数据库使变量比会话和应用程序更有效。要在多个应用程序之间共享数据,请使用分布式缓存并将数据存储在缓存中。