我应该在asp.net中声明一个会话变量

时间:2010-02-26 20:32:15

标签: c# .net asp.net session session-variables

我正在构建一个Asp.net应用程序。我需要在会话中保存HashTable。

在页面加载时我正在写

 protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
       Session["AttemptCount"]=new Hashtable(); //Because of this line.
    }   
}

这里的问题是,当用户刷新页面时,会话[“AttemptCount”]也会刷新。 我想知道我应该在哪里宣布

Session["AttemptCount"]=new Hashtable();

所以我的观点不会被删除。

编辑在Global.asax中,只要用户打开网站,此会话就会开始。我想仅在用户转到特定页面时才创建此会话。即Login.aspx

5 个答案:

答案 0 :(得分:16)

在您Global.asaxSession_Start方法中执行此操作...

protected void Session_Start(object sender, EventArgs e)
{
    Session["AttemptCount"]=new Hashtable();
}

<强>更新

然后只需检查会话变量是否存在,如果它不仅创建变量。你可以把它贴在一个房产里,让东西变得更干净......

public Hashtable AttemptCount
{
    get 
    {
        if (Session["AttemptCount"] == null)
            Session["AttemptCount"]=new Hashtable();
        return Session["AttemptCount"];
    }
}

然后你可以随时随地拨打AttemptCount财产......

public void doEvent(object sender, EventArgs e)
{
    AttemptCount.Add("Key1", "Value1");
}

答案 1 :(得分:3)

您可以在页面中创建这样的属性:

protected Hashtable AttemptCount
{
  get
  {
    if (Session["AttemptCount"] == null)
      Session["AttemptCount"] = new Hashtable();
    return Session["AttemptCount"] as Hashtable; 
  }
}

然后您可以使用它而不必担心:

protected void Page_Load(object sender, EventArgs e)
{
  this.AttemptCount.Add("key", "value");
}

答案 2 :(得分:2)

测试它是否存在

 protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
       if(Session["AttemptCount"] == null)
       {
          Session["AttemptCount"]=new Hashtable(); //Because of this line.
       }
    }   
}

尽管session_start更好,但您只需要在一个页面上使用它,但您可以为每个会话创建它。

答案 3 :(得分:1)

Hashtable hastable_name=new Hashtable()
Session["AttemptCount"]=hastable_name

答案 4 :(得分:0)

查看Global.asax和Application_Started(我认为),还有一个用于会话的开始。