![]() |
1
7
查看global.asax中的session_end()方法。当会话结束时,应该已经连接global.asax文件来调用此方法。你可以随意把代码放在那里。
当然,您应该注意到会话完全是服务器端的事情。它只在x分钟不活动后结束(默认为20分钟)。它不会在用户关闭窗口的瞬间结束。ASP.NET不知道用户关闭窗口或离开页面。 事实上,当这种情况发生时,在服务器端尝试执行任何即时操作都很困难。我的意思是,很容易在javascript中调用window.onbeforeunload,并在用户关闭窗口之前打开一个确认框。但是,当您试图在窗口实际关闭之前立即向服务器发送数据包时,我认为您会发现,要使它变得更加用户友好是一项困难的任务。您可以使用Ajax编写一些javascript来向服务器发送消息,Ajax通知服务器用户正在关闭浏览器,然后在发送消息后使用更多的javascript来关闭浏览器。但是用户会收到一条烦人的消息(在大多数浏览器中),说明脚本正在试图关闭窗口。对于用户来说,这看起来非常业余,可能会让他们对回来三思而后行。 因此,如果您愿意忍受延迟,我将完全避免整个javascript混乱,并依赖使用session_end()的纯服务器端解决方案。毕竟,如果用户关闭窗口或离开,ASP.NET将 最后 注意,因为会话将超时。 |
![]() |
2
3
会话结束将处理会话超时问题。但是,当用户关闭浏览器或移动到其他URL时,这不会触发。它等待会话超时结束。 为了检测其他条件,必须在客户机上使用javascript。但是,这些方法并不总是可靠的,这取决于浏览器/版本等。此外,如果用户的计算机关机、拔下插头,或者它们完全消失,这个脚本就不会启动。 你可以考虑其他的选择。你到底想用这个功能完成什么? |
![]() |
3
2
Web是无状态的,因此您将不知道用户是否关闭了浏览器窗口。您可以使用global.asax文件中的“session\u end”事件来超时会话。如果要访问所有会话,可以通过“会话\启动”事件将它们存储在集合中,也可以存储在全局文件中。 编辑:如果您想使用javascript截获页面的关闭事件,下面是方法(注意,这是不可靠的):
|
![]() |
4
0
您可以有一个base page,它由您的base page init事件中的每个aspx页继承,只需检查会话变量是否为空即可。如果没有,则表示会话已过期,您可以将用户重定向到登录页面。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |