【问题标题】:Where I should declare a session variable in asp.net我应该在 asp.net 中声明会话变量的地方
【发布时间】:2010-02-26 20:32:15
【问题描述】:

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

在页面加载时我正在写

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

这里的问题是,当用户刷新页面时, session["AttemptCount"] 也会被刷新。 我想知道我应该在哪里声明

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

这样我的视野就不会被刷新。

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

【问题讨论】:

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


    【解决方案1】:

    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");
    }
    

    【讨论】:

    • 在 Global.asax 中,一旦用户打开网站,此会话就会开始。仅当用户转到特定页面时,我才想创建此会话。即 Login.aspx
    • 我已经更新了我的答案,您只需要通过检查 null 来检查它是否存在
    • 你在哈希表中存储了什么?是用户尝试登录的次数吗?
    • 是的,我存储没有。尝试登录特定用户的次数。因此,如果特定用户尝试登录超过 15 次,我可以阻止该会话。
    • 通过禁用会话 cookie,人们可以很容易地解决这个问题。
    【解决方案2】:

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

    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");
    }
    

    【讨论】:

      【解决方案3】:

      先测试是否存在

       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 更好,但您只需要在一个页面上使用它,但您可以为每个会话创建它。

      【讨论】:

        【解决方案4】:
        Hashtable hastable_name=new Hashtable()
        Session["AttemptCount"]=hastable_name
        

        【讨论】:

          【解决方案5】:

          查看 Global.asax 和 Application_Started(我认为),也有一个用于会话启动。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多