我知道这几乎是同一个问题:Joe 问
我有一个网络应用程序。当我关闭窗口(在浏览器上单击 X)时,它将调用注销功能。
问题是当我打开 Web 应用程序并在不同窗口(新窗口或另一个选项卡)上打开相同的 Web 应用程序时。并关闭其中一个窗口,即使该应用程序仍有一个打开的窗口,它也会调用注销功能。
我想要做的是,首先检查是否有其他窗口使用与我即将关闭的当前窗口相同的 jsessionid。当我关闭该窗口时,如果没有使用相同 jsessionid 的窗口,它只会调用注销功能。
当然,标准方法是让登录 cookie 在浏览器关闭时过期,从而将您注销,但我猜这在您的情况下是不可接受的行为?
AFAIK 您无法访问另一个浏览器窗口的内容,除非该窗口是使用 Javascript 创建的。由于听起来您在 Javascript 中使用 onUnload 处理程序,因此您可以使用这些相同的处理程序来跟踪您的窗口。但它会导致一些开销,并且不会完全证明(例如,不会处理浏览器崩溃或用户导航离开您的应用程序)。
伪代码:(这需要混合使用服务器端代码和客户端 JavaScript,因为负载处理程序是在 Javascript 中处理的并且会话是服务器端的)
function OnLoad() {
if (document.referrer != "{identify your app here}")
Session("BrowserWindowsOpen")++;
}
function OnUnLoad() {
if ({your code for if window is closed})
{
Session("BrowserWindowsOpen")--;
if (Session("BrowserWindowsOpen") == 0 )
performLogOut();
}
}