Где я должен объявить переменную сеанса в asp.net


Я строю Asp.net применение. Мне нужно сохранить хэш-таблицу в сеансе.

При загрузке страницы я пишу

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

Здесь проблема в том, что когда пользователь обновляет страницу, сессия["AttemptCount"] также обновляется. Я хочу знать, где я должен объявить

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

Чтобы мое видение не было перепутано.

EDIT In Global.asax, эта сессия начнется, как только пользователь откроет веб-сайт. Я хочу создать эту сессию только в том случае, если пользователь перейдет к конкретная страница. то есть логин.aspx

5 6

5 ответов:

Сделайте это в методе Session_Start в вашем глобальном.asax Вот так...

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

Вы можете создать на своей странице такое свойство:

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

Проверить, существует ли он первым

 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 лучше, вам нужно использовать его только на одной странице, но вы можете создать его для каждого сеанса.

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

Посмотрите на Global.asax и Application_Started (я думаю), и есть один для начала сессии тоже.