【发布时间】:2010-12-13 03:10:45
【问题描述】:
我有示例,当用户关闭他的浏览器窗口时,我需要终止会话。 我试过 page_unload() 不工作。 示例是:我有父窗口,窗口将从它打开我需要在用户关闭子窗口时删除会话。 请问我需要一些帮助。
【问题讨论】:
标签: javascript c# asp.net webforms
我有示例,当用户关闭他的浏览器窗口时,我需要终止会话。 我试过 page_unload() 不工作。 示例是:我有父窗口,窗口将从它打开我需要在用户关闭子窗口时删除会话。 请问我需要一些帮助。
【问题讨论】:
标签: javascript c# asp.net webforms
这不是普通网络 http 协议所提供的。没有真正的方法可以确定浏览器何时关闭。你只能“有点”知道。您必须拼凑出一个丑陋的 hack 以获得任何程度的确定性,即便如此,它也一定会在大量边缘情况下失败或导致令人讨厌的副作用。
正常的解决方法是每隔一段时间从浏览器向您的服务器发送 ajax 请求,以设置一种“心跳”。当心跳停止时,浏览器关闭,因此您终止会话。但同样:这是一个可怕的黑客攻击。在这种情况下,主要问题是如果服务器和客户端不同步或存在 javascript 错误,很容易误报心跳失败,并且有一个副作用是您的会话将永远不会自行过期。
【讨论】:
你有父窗口中所有子窗口的引用 你需要 onfocus 来检查子窗口 所以当你的父母得到焦点时,检查孩子是否在那里
【讨论】:
如果您的客户端脚本向您的服务器端应用发送了 AJAX 心跳,您可能会使用丢失的心跳来关闭会话。
【讨论】:
您可以使用回发到退出页面的 window.onbeforeunload 处理程序来执行此操作。
function CloseSession( )
{
location.href = 'SignOut.aspx';
}
window.onbeforeunload = CloseSession;
这是重复问题.. chk out here
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
【讨论】:
没有一致的方法来检测通过 javascript 关闭的浏览器。如果您担心有太多会话挂起,请减少服务器上的会话超时。如果您这样做,您还需要通知您的用户,他们需要保持活跃,以免丢失任何工作。
【讨论】:
很遗憾,这是不可能的。您可以在网络上找到声称他们可以做到这一点的示例,但它们有时会以非常微妙的方式存在缺陷。
【讨论】: