我想检测用户何时关闭浏览器窗口?

Amr*_*har 2 javascript c# asp.net webforms

我有示例,我需要在用户关闭浏览器窗口时终止会话.我试过page_unload()无法正常工作.示例是:我有父窗口,窗口将从中打开我需要在用户关闭子窗口时删除会话.拜托,我需要一些帮助.

Joe*_*orn 10

这不是普通Web http协议中提供的内容.当浏览器关闭时,没有真正的方法可以确定; 你只能"有点"知道.你必须把一个丑陋的黑客扔在一起才能达到任何程度的确定性,即便如此,它仍然会在大量边缘情况下失败或导致令人讨厌的副作用.

正常的解决方法是每隔一段时间从浏览器向服务器发送ajax请求以设置一种"心跳".当心跳停止时,浏览器关闭,因此您终止会话.但同样:这是一个可怕的黑客.在这种情况下,主要的问题是,如果服务器和客户端失去同步或者出现javascript错误,很容易因失败的心跳而得到误报,并且会产生一个副作用,即你的会话永远不会过期.

  • +1:唯一的例外是如果你正在运行某种与服务器不断通信的内联Java(或类似)applet,唯一的原因是因为它在常规HTML通道之外运行.HTML不是一个有状态的协议,任何尝试使用javascript来实现它的方法都是最好的. (4认同)

Jee*_*raj 5

您可以使用window.onbeforeunload处理程序执行此操作,该处理程序将回发到注销页面.

function CloseSession( )
{
    location.href = 'SignOut.aspx'; 
}
window.onbeforeunload = CloseSession;
Run Code Online (Sandbox Code Playgroud)

这是重复问题..请点击这里

关闭浏览器实际上应该清除会话变量和ASP.net会话ID

/sf/ask/64402971/

  • 不能保证 onbeforeunload 会触发。 (2认同)