为什么“Session_end”不起作用?

时间:2013-02-07 14:16:23

标签: c# asp.net asp.net-mvc-3

global.asax文件中的事件写成如下:

protected void Session_End(Object sender, EventArgs e)
{
    var x = 5;
}

当客户端关闭窗口时代码没有到达那里,为什么?

3 个答案:

答案 0 :(得分:3)

  

当客户端关闭窗口时代码没有到达那里,为什么?

因为当客户端关闭浏览器时不应该调用此事件。此事件(顾名思义)旨在在会话到期时调用。默认会话到期超时为20分钟,因此在客户端关闭浏览器20分钟后将调用此事件。

哦,你应该注意一个非常重要的问题:如果你使用进程外会话状态模式(例如StateServer或SqlServer),这个事件将永远被调用。

答案 1 :(得分:1)

P.S。:仅Session_End会话管理器

支持InProc事件

当你的会话过期时会被调用。

答案 2 :(得分:0)

我认为你需要在页面关闭或文档解密时使用javascript函数,即onbeforeunload。并且在该函数中向服务器发出一个ajax请求,指示客户端正在关闭窗口。但是你应该是注意安全性,因为这个javascript方法在客户端注册,恶意用户可以更改ajax请求(甚至阻止它)。如果你不考虑任何安全问题,你很高兴。好运。