Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我想在每个浏览器中关闭浏览器后注销我的应用程序?_Java_Javascript_Jsf - Fatal编程技术网

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中查看一下,您可能会发现它很有用。