最近本人做个在线用户列表,用到了session_onend事件,
确发现session_onend并非按预期执行
找了网上不了资料,也没得过所以然
最后自己调试多次,发现了几个规律
1、如果没有给用户任何Session赋值,Session.SessionId 是不固定的,可以做个测试Page load中加入Response.Write(Session.SessionId);不停的刷新页面,可以看出每次SessionId的值是不同的 但是如果加一句Session["name"]="test";就可以发现SessionId的值是不变的 当然这里说的是没有Global.asax文件条件下 或者Global.asax没有定义Session Start事件
SessionId 是不固定的当然没法使用session_onend事件
2、Session.Abandon()如果放在PAGE LOAD中就没法激活session_onend 但Session Start事件确激活两次,而且两次SessionId是一样的,不知道是为什么?请高手解释
3、不管怎么样我的session_onend 中SQL操作都没法执行,不知道是什么原因 href="/passer_byw/Services/Pingback.aspx" rel="pingback" />
FeedBack:
确发现session_onend并非按预期执行
找了网上不了资料,也没得过所以然
最后自己调试多次,发现了几个规律
1、如果没有给用户任何Session赋值,Session.SessionId 是不固定的,可以做个测试Page load中加入Response.Write(Session.SessionId);不停的刷新页面,可以看出每次SessionId的值是不同的 但是如果加一句Session["name"]="test";就可以发现SessionId的值是不变的 当然这里说的是没有Global.asax文件条件下 或者Global.asax没有定义Session Start事件
SessionId 是不固定的当然没法使用session_onend事件
2、Session.Abandon()如果放在PAGE LOAD中就没法激活session_onend 但Session Start事件确激活两次,而且两次SessionId是一样的,不知道是为什么?请高手解释
3、不管怎么样我的session_onend 中SQL操作都没法执行,不知道是什么原因 href="/passer_byw/Services/Pingback.aspx" rel="pingback" />
FeedBack:
#
re: session_onend失效的原因分析和疑问
2005-03-08 14:17 |
KingofSC
这是我得global.asax.cs
public class Global : System.Web.HttpApplication
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
public Global()
{
InitializeComponent();
}
protected void Application_Start(Object sender, EventArgs e)
{
}
// protected void Session_Start(Object sender, EventArgs e)
// {
//
// }
protected void Application_BeginRequest(Object sender, EventArgs e)
{
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
}
protected void Application_Error(Object sender, EventArgs e)
{
}
protected void Session_End(Object sender, EventArgs e)
{
}
protected void Application_End(Object sender, EventArgs e)
{
}
public class Global : System.Web.HttpApplication
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
public Global()
{
InitializeComponent();
}
protected void Application_Start(Object sender, EventArgs e)
{
}
// protected void Session_Start(Object sender, EventArgs e)
// {
//
// }
protected void Application_BeginRequest(Object sender, EventArgs e)
{
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
}
protected void Application_Error(Object sender, EventArgs e)
{
}
protected void Session_End(Object sender, EventArgs e)
{
}
protected void Application_End(Object sender, EventArgs e)
{
}
#
re: session_onend失效的原因分析和疑问
#
re: session_onend失效的原因分析和疑问
2005-03-08 17:22 |
右岸
查看过相关资料,session_OnEnd事件要在至少一次请求结束后才有可能触发,如果session.abandon放在Page_OnLoad里面,第一次请求还没有结束,所以session_OnEnd当然无法触发。session_onstart则不一样,当第一次提出请求的时候触发了session_onstart,而在page_onload中session.abandon产生新的sessionid,此时虽然session_Onend没有触发,但是session_Onstart事件还是要触发,而且新的sessionid要在本次请求结束后才能使用,所以当前的session_Onstart事件中使用的sessionid和上一次请求时候的sessionid是一样的。