ASP.NET会话和页面生命周期

时间:2014-02-18 14:21:49

标签: asp.net session lifecycle pageload page-lifecycle

假设在ASP.NET .aspx页面中我有Page Load方法和按钮点击事件的另一种方法。

Page Load方法中,我通过检查会话来检查用户是否已登录。无论他是否存在,我都将结果存储在全局变量中。

Boolean isGuest = false;

protected void Page_Load(object sender, EventArgs e) {

        if(Session["id"]==null)
              isGuest = true;
        else
              isGuest = false;
}

假设已经过了20分钟,我不知道Session是否已经终止,然后我点击了一个Button,事件是这样的:

protected void Button_Click(object sender, EventArgs e) {
            if(isGuest==false)
                 //do something
            else
                 // do another thing
}

我的问题是:当我点击按钮时,ASP.NET会再次通过Page_Load方法(再次检查isGuest),或者只是执行Button_Click内的内容方法,意思是,它使用的Boolean isGuest可能是false,但实际上会话终止,意味着它应该是true

2 个答案:

答案 0 :(得分:4)

Page_Load在控件事件

之前始终触发

看看:ASP.NET Page Life Cycle Overview

旁注:如果您只想在第一次加载时而不是在每次回发时都做某事,则必须检查IsPostBack属性。

答案 1 :(得分:-3)

你可以:

  1. 使用UserID和其他配置文件属性定义您自己的类;
  2. 将该类添加到global.asax会话已启动事件Session["NameReferingToYourClass"] = new YourClass();
  3. 中的会话
  4. 如果需要,可以在页面生命周期mYourClass = Session["NameReferingToYourClass"]的早期阶段将成员变量设置为会话对象;
  5. 然后,您可以在您的成员变量可用的代码中的任何位置对您的类进行任何更改;
  6. 将所有更改保存到Page.Unload(..){ Session["NameReferingToYourClass"] = mYourClass的会话中。
  7. 这样您就可以在代码中使用类属性,包括UserId,非常类似于Windows应用程序,代码中的其他任何位置都不会提及会话。