站点信息 访问统计:69113     在线人数:6    本次启动时间:2009-1-7 4:39:49
当前位置:  Csdtn 首页->Web技术->Asp.net->文章
注册阿里妈妈赚广告费
Google
关于session_end的执行测试,解决困惑
作者:lys1978900 时间:2007-10-15  点击:747  本文Tag:.net | asp.net | Session | Web技术

很惭愧这个问题困惑了我2天时间, 查阅无数文章,最后经过测试发现,这些文章并没有说到重点

包括csdn里很多程序员也没有搞清楚怎么回事,其实seesion_end方法不执行的原因很简单.

有三点吧,第一是config.sys设置问题,在system.web节点下添加

<sessionState mode="InProc" timeout="1" cookieless="false" />

注意: InProc 模式不需要IP地址等配置,因为给ASP.NET自带的状态服务无关.

第二,在global.asax里添加

 void Session_OnEnd(object sender, EventArgs e) 方法

我也开始也奇怪为什么要添加,后来经过测试发现 Session_End和Session_OnEnd执行的条件不相同

Session_End 是所有SESSION失效后执行

Session_OnEnd 是某一Session失效后执行

区别是不是很大? 不经过测试我也没发现,本以为session_end全部在掌控当中,没想到能困惑这么长时间

第三点,也就是很重要的一点,如果方法里含有调用http上下文信息的,一律不执行

例如 HttpApplicationState NameList = HttpContext.Current.Application;

这是肯定不会执行的,可以直接在这个方法里用Application 或者Session ,request等想都别想!

另外我发现传递自定义类有时候也会失效,所以大家在这个方法里写代码的时候

尽量把全部代码都集中到这个方法里,尽量少去调用静态的自定义方法.

可以通过 Application["test"]=1; 来测试,看看他执行到哪,哪里没有执行等等

文章写的潦草,但确实能解决一些问题,如果我当初能看到这样的文章,那我也不会困惑2天了

希望您能回复,提出您的意见!谢谢