C# Asp.net会话变量
我有一个asp.net项目,后面有c#代码。我有一个名为GlobalVariable的静态类,我在其中存储一些信息,例如当前选择的产品 然而,我看到,当有两个用户使用该网站时,如果其中一个用户更改了所选的产品,如果每个人都更改了该产品。静态变量似乎对每个人都是公共的C# Asp.net会话变量,c#,asp.net,session-variables,C#,Asp.net,Session Variables,我有一个asp.net项目,后面有c#代码。我有一个名为GlobalVariable的静态类,我在其中存储一些信息,例如当前选择的产品 然而,我看到,当有两个用户使用该网站时,如果其中一个用户更改了所选的产品,如果每个人都更改了该产品。静态变量似乎对每个人都是公共的 我想(从c#代码)创建某种会话变量,只从c#代码中使用,但不仅从页面,而且从任何类中使用。是的,静态变量由整个应用程序共享,它们对用户/会话都不是私有的 要从非页面类访问会话对象,应使用HttpContext.Current.Ses
我想(从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文件中的处理程序)来创建会话对象。顺便说一句,感谢您提供了一个如何使用会话的示例。在整个应用程序中都可以访问静态变量。会话用于存储和访问用户登录和注销中的变量。使用数据库使变量比会话和应用程序更有效。要在多个应用程序之间共享数据,请使用分布式缓存并将数据存储在缓存中。