看一下global.asax中的Session_End()方法.应该已经连接global.asax文件以在会话结束时调用此方法.您可以根据需要将代码放在那里.
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Fires when the session ends
End Sub
Run Code Online (Sandbox Code Playgroud)
当然,您应该注意到会话完全是服务器端的事情.它只会在X分钟不活动后结束(默认为20分钟).它不会在用户关闭窗口的瞬间结束.ASP.NET不知道用户关闭窗口或离开页面.
事实上,当发生这种情况时,尝试在服务器端执行任何立即操作是很棘手的.我的意思是,在Javascript中调用window.onbeforeunload并在用户关闭窗口之前调出一个确认框很容易.但是,当您尝试在窗口实际关闭之前立即将数据包发送到服务器时,我认为您会发现使这一切都变得用户友好是一项艰巨的任务.您可以编写一些Javascript,使用AJAX向服务器发送消息,通知服务器用户正在关闭其浏览器,然后在发送消息后使用更多Javascript关闭浏览器.但随后用户将收到恼人的消息(在大多数浏览器中),说明脚本正在尝试关闭窗口.这对用户来说看起来非常业余,可能会让他们三思而后行.
因此,如果你愿意忍受延迟,我会完全避免整个Javascript混乱,并依赖于使用Session_End()的纯服务器端解决方案.毕竟,如果用户关闭窗口或离开,ASP.NET 最终会注意到因为会话将超时.