我有一个带有c#代码的asp.net项目。我有一个名为GlobalVariable的静态类,我存储了一些信息,例如当前选择的产品。
但是,我看到当有两个用户使用该网站时,如果有人更改了所选产品,则会为每个人更改。静态变量似乎与每个人都是相通的。
我想创建(来自c#代码)某种会话变量,它只使用c#代码,但不仅来自页面,而且来自任何类。
答案 0 :(得分:25)
是静态变量由整个应用程序共享,它们绝不是用户/会话的私有。
要从非页面类访问Session对象,您应该使用HttpContext.Current.Session
。
答案 1 :(得分:8)
GlobalVariable
是一个误导性的名称。无论它叫什么,如果是每个会话,它不应该是static
。你可以这样做:
// store the selected product
this.Session["CurrentProductId"] = productId;
您不应该尝试全局访问Session
集合。相反,只传递您需要的数据,并在适当的时候使用Session
获取/设置。
以下是在MSDN上使用session storage in ASP .NET的概述。
答案 2 :(得分:8)
你回答了自己的问题。答案是会话变量。在GlobalVariable类中,您可以放置由会话变量支持的属性。
示例:
public string SelectedProductName
{
get { return (string)Session["SelectedProductName"]; }
set { Session["SelectedProductName"] = value; }
}