global.asax 文件中的事件是这样写的:
protected void Session_End(Object sender, EventArgs e)
{
var x = 5;
}
当客户端关闭窗口时,代码没有到达那里,为什么?
global.asax 文件中的事件是这样写的:
protected void Session_End(Object sender, EventArgs e)
{
var x = 5;
}
当客户端关闭窗口时,代码没有到达那里,为什么?
当客户端关闭窗口时,代码没有到达那里,为什么?
因为当客户端关闭其浏览器时不应调用此事件。此事件(顾名思义)旨在在会话到期时调用。默认会话到期超时为 20 分钟,因此该事件将在客户端关闭其浏览器后 20 分钟调用。
哦,还有一个非常重要的问题您应该知道:如果您使用进程外会话状态模式(例如 StateServer 或 SqlServer),则永远不会调用此事件。
PS:该Session_End
活动仅由InProc
会话管理器支持
当您的会话过期时,它会被调用。
我认为您需要在页面关闭或文档卸载时使用 javascript 函数,即onbeforeunload。并在该函数中向服务器发出 ajax 请求,指示客户端正在关闭窗口。但是您应该注意安全性,因为这个 javascript在客户端注册的方法,恶意用户可以更改 ajax 请求(甚至阻止它)。如果你不考虑任何安全问题,你很高兴。祝你好运。