
很惭愧这个问题困惑了我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天了
希望您能回复,提出您的意见!谢谢