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

ASP.NET会话和页面生命周期,asp.net,session,lifecycle,pageload,page-lifecycle,Asp.net,Session,Lifecycle,Pageload,Page Lifecycle,假设在ASP.NET.aspx页面中,我有页面加载方法和另一个按钮单击事件方法 在页面加载方法中,我通过检查会话来检查用户是否登录。不管他是不是,我都将结果存储在一个全局变量中 Boolean isGuest = false; protected void Page_Load(object sender, EventArgs e) { if(Session["id"]==null) isGuest = true; else

假设在ASP.NET
.aspx
页面中,我有
页面加载
方法和另一个按钮单击事件方法

页面加载
方法中,我通过检查会话来检查用户是否登录。不管他是不是,我都将结果存储在一个全局变量中

Boolean isGuest = false;

protected void Page_Load(object sender, EventArgs e) {

        if(Session["id"]==null)
              isGuest = true;
        else
              isGuest = false;
}
假设20分钟过去了,我不知道会话是否已终止,然后我单击一个按钮,事件如下所示:

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

我的问题是:当我点击按钮时,ASP.NET是否再次通过
页面加载
方法(再次检查
isGuest
),或者它只是执行
按钮内的内容\u点击
方法,这意味着它使用了一个
布尔值的isGuest
,可能是
,但实际上会话被终止,意味着它应该是
true

页面加载总是在控制事件之前触发

看看:

旁注:如果只想在第一次加载而不是每次回发时执行操作,则必须检查
IsPostBack
属性。

您可以:

  • 使用
    用户ID
    和其他配置文件属性定义您自己的类
  • 将该类添加到global.asax session started event
    session[“NameReferingToYourClass”]=new YourClass()中的会话中
  • 在页面生命周期的早期将成员变量设置为会话对象
    mYourClass=session[“NameReferingToYourClass”]
    casted(如果需要)
  • 然后,您可以在您的成员变量可用的代码中的任何地方对类进行任何更改
  • 页面上保存类以及对会话的所有更改。卸载(..){session[“NameReferingToYourClass”]=mYourClass

  • 这样,您就可以在代码中使用类属性,包括
    UserId
    ,就像windows应用程序一样,在代码中的任何地方都不会提到会话。

    为什么不简单地测试它呢?@RononDex它已经过测试并正常工作,但我只想确保没有任何问题。这似乎与wha完全无关这不是问题所在。