2

global.asax 文件中的事件是这样写的:

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

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

4

3 回答 3

4

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

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

哦,还有一个非常重要的问题您应该知道:如果您使用进程外会话状态模式(例如 StateServer 或 SqlServer),则永远不会调用此事件。

于 2013-02-07T14:17:18.427 回答
1

PS:该Session_End活动仅由InProc会话管理器支持

当您的会话过期时,它会被调用。

于 2013-02-07T14:21:52.757 回答
0

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

于 2013-02-07T14:36:29.700 回答