session_onend事件

最近本人做个在线用户列表,用到了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操作都没法执行,不知道是什么原因
posted on 2005-03-07 19:24 天才.NET 阅读(215) 评论(7)   编辑  收藏
href="/passer_byw/Services/Pingback.aspx" rel="pingback" />
FeedBack:
#  re: session_onend失效的原因分析和疑问
2005-03-08 13:42 | KingofSC
我测试第一个就没有通过啊
sessionid是不变的
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Response.Write(Session.SessionID);
}

  
#  re: session_onend失效的原因分析和疑问
2005-03-08 14:01 |
这里说的是没有Global.asax文件条件下 或者Global.asax没有定义Session Start事件
你用VS新建项目自动生成了Global.asax文件中有Session Start事件
  
#  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)
{

}
  
#  re: session_onend失效的原因分析和疑问
2005-03-08 14:41 | R2
Session_OnEnd事件仅限于Session InProc模式中,其他方式都不会激活的!微软有文档说明!
  
#  re: session_onend失效的原因分析和疑问
2005-03-08 14:56 |

可是我的条件都慢足了,还不能在session_onend中做SQL查询
  
#  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是一样的。
  
#  re: session_onend失效的原因分析和疑问
2005-03-08 17:40 |
有个问题 请求结束是以什么为标志

因为session_onstart和session.abandon不是同一个页面文件

global.asax是在应用程序一直运行着session.abandon后就激发session_onstart但这里显然请求没有结束 Application_End  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值