为何Global.asax文件中的Session_End不能触发?

cnweboy 2006-01-12 01:46:34
//部分代码,注:Utility.Log是一个写日志的方法,已经声明
protected void Session_Start(Object sender, EventArgs e)
{
Utility.Log("Session_Start test!!!!", "none");
}

protected void Session_End(Object sender, EventArgs e)
{
Utility.Log("Session_End test!", "none");
}

在完成一次会话后(用Abandon),可在日志文件中查看到Session_Start写的测试,但却看不到Session_End的测试

麻烦各位大侠帮忙解答一下,谢谢!!
...全文
1201 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanxing 2006-04-09
  • 打赏
  • 举报
回复
学习
cxb_hy 2006-04-07
  • 打赏
  • 举报
回复
marke
cnn3 2006-03-04
  • 打赏
  • 举报
回复
收藏
cnweboy 2006-01-21
  • 打赏
  • 举报
回复
Sorry,忘记来结贴了:)
问题解决了,ivee(ivee)说得不错,正象他所说一样,从原理上来说Session_End是不太可能还有Request和Response对象访问的。
同时也非常感谢其他网以的解答。
ivee 2006-01-15
  • 打赏
  • 举报
回复
问题出在Utility.Log()中。Session_End中不能使用Request和Response对象,这一点很重要!很多人就因为这个认为Session_End有BUG。
另外,Session_End在Timeout和Abandon时都会触发,测试时用Abandon没有问题,不必非得改Timeout设置。
cnweboy 2006-01-15
  • 打赏
  • 举报
回复
谢谢各们的解答。
我配置文件已经设置了 mode="InProc",如下:

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

麻烦再看看是否有误?我已经在两台电脑(win2003)上试过了,都一样
xiaostar007 2006-01-12
  • 打赏
  • 举报
回复
ding
Eddie005 2006-01-12
  • 打赏
  • 举报
回复
应该是跟web.config里的设置有关,

<sessionState mode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"/>

注意到mode有几种方式:
Off 指示会话状态未启用。
InProc 指示在本地存储会话状态。
StateServer 指示在远程计算机上存储会话状态。
SQLServer 指示在 SQL Server 上存储会话状态。

只有设置为InProc基于本地进程的才能触发Session_End事件;
jxufewbt 2006-01-12
  • 打赏
  • 举报
回复
saucer(思归) 老大正解
happyfamily 2006-01-12
  • 打赏
  • 举报
回复
Session最短时间是20分钟,可在Session_End里写一个方法来验证。
saucer 2006-01-12
  • 打赏
  • 举报
回复
1。记住,Session_End只在InProc模式下才会触发

2。关掉浏览器不会自动摧毁Session,除非你通过脚本,在浏览器关闭时,调用另一页并指示服务器端放弃Session

3。把你的会话状态模式设成InProc,把Session过期时间设短些,看是否会触发Session_End

110,589

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧