Java 我想在每个浏览器中关闭浏览器后注销我的应用程序?
我通过这个Java 我想在每个浏览器中关闭浏览器后注销我的应用程序?,java,javascript,jsf,Java,Javascript,Jsf,我通过这个窗口调用这个代码 这在IE中运行良好,但在其他浏览器中不起作用。此代码特定于IE,但在其他浏览器中不起作用。如何在所有浏览器中检测浏览器关闭事件 function ConfirmClose() { if (isIE7Min) //To check for IE Version 7.0 and above { var n = window.event.screenX - window.screenLeft;
窗口调用这个代码代码>
这在IE中运行良好,但在其他浏览器中不起作用。此代码特定于IE,但在其他浏览器中不起作用。如何在所有浏览器中检测浏览器关闭事件
function ConfirmClose()
{
if (isIE7Min) //To check for IE Version 7.0 and above
{
var n = window.event.screenX - window.screenLeft;
var b = n > document.documentElement.scrollWidth-20;
if ((b && window.event.clientY < 0) || window.event.altKey)
{
if (!self.closed)
{
refresh = true;
}
}
}
else //IE Version 6.0 and below
{
if (event.clientY < 0 && event.clientX < 0)
{
if (!self.closed)
{
refresh = true;
}
}
}
}
/*Function for onunload*/
function HandleOnClose()
{
ConfirmClose();
if (isIE7Min)
{
if ((window.event.clientX > 0 && window.event.clientY < 0) || window.event.altKey)
{
if (refresh == true)
{
window.open("/DealPricingJavaUAT/DealPricingJsp/Home/logout.jsf");
//Code That redirects to the Session Invalidation Page
}
}
}
else
{
if (event.clientY < 0 && event.clientX < 0 || window.event.altKey)
{
if (refresh == false)
{
window.open("/DealPricingJavaUAT/DealPricingJsp/Home/logout.jsf");
// Code That redirects to the Session Invalidation Page
}
}
}
}
函数ConfirmClose()
{
if(isIE7Min)//检查IE 7.0及以上版本
{
var n=window.event.screenX-window.screenLeft;
var b=n>document.documentElement.scrollWidth-20;
if((b&&window.event.clientY<0)| | window.event.altKey)
{
如果(!self.closed)
{
刷新=真;
}
}
}
else//IE 6.0及以下版本
{
if(event.clientY<0&&event.clientX<0)
{
如果(!self.closed)
{
刷新=真;
}
}
}
}
/*onunload函数*/
函数HandleOnClose()
{
ConfirmClose();
如果(Isie7分钟)
{
if((window.event.clientX>0&&window.event.clientY<0)| | window.event.altKey)
{
如果(刷新==true)
{
window.open(“/DealPricingJavaUAT/DealPricingJsp/Home/logout.jsf”);
//重定向到会话无效页面的代码
}
}
}
其他的
{
if(event.clientY<0&&event.clientX<0 | | window.event.altKey)
{
如果(刷新==false)
{
window.open(“/DealPricingJavaUAT/DealPricingJsp/Home/logout.jsf”);
//重定向到会话无效页面的代码
}
}
}
}
我认为用户不可能总是注销。如果用户的web浏览器发生崩溃,客户端代码将永远不会执行。有些web浏览器会很快自行关闭,不必等待执行客户端代码
您应该找到另一种解决方案,例如,如果用户在某段时间内未处于活动状态,则在服务器端注销。无法检测用户何时关闭浏览器。
如果您使用java并使用Cookie检查用户是否登录,则可以
执行cookie.setMaxAge(-1)
这将确保浏览器关闭时删除Cookie。我在服务器上的会话超时30分钟。但当用户一次又一次地创建会话时,我的服务器性能会下降,不要依赖服务器超时。创建自己的超时系统。会话超时仅可在服务器端配置。好的,但假设某个浏览器打开15次而未注销,则它将为此创建15次会话,服务器性能将再次降低。。这就是为什么我想在浏览器关闭后调用注销页。如果同一个web浏览器打开15次,并不意味着将有15次会话。根据您设计系统的方式,可能会有更多或更少的错误。即使gigadot的答案是正确的,但在某些浏览器中也可以尝试捕获无错误关闭。在onbeforeunload中查看一下,您可能会发现它很有用。