ASP.NET会话和页面生命周期
假设在ASP.NETASP.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
.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 eventsession[“NameReferingToYourClass”]=new YourClass()中的会话中代码>
在页面生命周期的早期将成员变量设置为会话对象mYourClass=session[“NameReferingToYourClass”]
casted(如果需要)李>
然后,您可以在您的成员变量可用的代码中的任何地方对类进行任何更改李>
在页面上保存类以及对会话的所有更改。卸载(..){session[“NameReferingToYourClass”]=mYourClass
这样,您就可以在代码中使用类属性,包括UserId
,就像windows应用程序一样,在代码中的任何地方都不会提到会话。为什么不简单地测试它呢?@RononDex它已经过测试并正常工作,但我只想确保没有任何问题。这似乎与wha完全无关这不是问题所在。