我有示例,我需要在用户关闭浏览器窗口时终止会话。 我试过page_unload()无法正常工作。 示例是:我有父窗口,窗口将从中打开我需要在用户关闭子窗口时删除会话。 我需要一些帮助。
答案 0 :(得分:10)
这不是普通网络http协议中提供的内容。当浏览器关闭时,没有真正的方法可以确定;你只能“有点”知道。你必须把一个丑陋的黑客扔在一起才能获得任何确定性,即使这样,它也会在大量边缘情况下失败或导致令人讨厌的副作用。
正常的解决方法是每隔一段时间从浏览器向服务器发送ajax请求,以设置一种“心跳”。当心跳停止时,浏览器关闭,因此您终止会话。但同样:这是一个可怕的黑客。在这种情况下,主要的问题是,如果服务器和客户端失去同步或者出现javascript错误,很容易因失败的心跳而得到误报,并且会产生一个副作用,即你的会话永远不会过期。
答案 1 :(得分:5)
您可以使用window.onbeforeunload处理程序执行此操作,该处理程序会回发到退出页面。
function CloseSession( )
{
location.href = 'SignOut.aspx';
}
window.onbeforeunload = CloseSession;
这是重复问题..这里是
Closing the browser should actually clear the session variables an ASP.net session id
https://stackoverflow.com/questions/920042/kill-server-side-session-on-browser-window-close-closed
答案 2 :(得分:1)
不幸的是,这是不可能的。你可以在网上找到声称可以做到这一点的例子,但它们有时会以非常微妙的方式存在缺陷。
答案 3 :(得分:0)
没有一致的方法可以通过javascript检测浏览器关闭。如果您担心挂起的会话太多,请减少服务器上的会话超时。如果您这样做,您还需要通知您的用户他们需要保持活跃状态,以免丢失任何工作。
答案 4 :(得分:0)
如果您的客户端脚本向您的服务器端应用程序发送了AJAX心跳,您可能会使用丢失的节拍来关闭会话。
答案 5 :(得分:0)
您可以在父窗口中引用所有子窗口 你需要onfocus来检查子窗口 所以当你的父母得到焦点时,检查孩子是否在场