我知道这几乎是同一个问题:ask by Joe
我有一个网络应用程序。当我关闭窗口(在浏览器上单击X)时,它将调用Logout功能。
问题是当我打开Web应用程序并在不同窗口(新窗口或其他选项卡)上打开相同的Web应用程序时。并关闭其中一个窗口,它将调用Logout功能,即使该应用程序仍有一个打开的窗口。
我想要做的是,首先检查是否有其他窗口在我即将关闭的当前窗口中使用相同的jsessionid。当我关闭该窗口时,如果没有窗口使用相同的jsessionid,它将只调用Logout功能。
答案 0 :(得分:3)
标准的方法当然是让登录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();
}
}