仅在浏览器关闭时结束会话

Ending a session on browser close only

本文关键字:结束 会话 浏览器      更新时间:2023-09-26

我试图结束用户的会话时,他们关闭浏览器,因为他们从来没有正确退出。

我需要改变一个值在数据库后,他们关闭浏览器。

<script type="text/javascript">
    window.onbeforeunload = check;
    function check() {
        return "Are you sure you want to exit this page?";
        //or put whatever function you need to call when a user closes the web //browser.
        endSession();
    }
</script>

这确实在关闭浏览器时有效,但不幸的是,当我重定向到任何其他页面时也有效。

是否有办法做到这一点浏览器关闭吗?

在我回答你的问题之前,我想让你知道,没有一种万无一失的技术可以100%地捕获浏览器关闭事件。问题在于HTTP的无状态特性。

首先创建一个页面AutoLogOut。-

protected void Page_Load(object sender, EventArgs e)
{
    Session.Abandon();
}

然后添加以下javascript代码在您的页面或主页:-

<script type="text/javascript">
     var clicked = false;
    function CheckBrowser()
    {
        if (clicked == false)
        {
            //Browser closed
        }
        else
        {
            //redirected 
            clicked = false;
        }
    }
    function bodyUnload()
    {
        if (clicked == false)//browser is closed
        {
            var request = GetRequest();
            request.open("GET", "AutoLogOut.aspx", true);
            request.send();
        }
    }
    function GetRequest()
    {
        var request = null;
        if (window.XMLHttpRequest)
        {
            //incase of IE7,FF, Opera and Safari browser
            request = new XMLHttpRequest();
        }
        else
        {
            //for old browser like IE 6.x and IE 5.x
            request = new ActiveXObject('MSXML2.XMLHTTP.3.0');
        }
        return request;
    } 

最后在body标签上添加这些事件处理程序:-

<body onunload="bodyUnload();" onclick ="clicked=true;>

现在当用户关闭浏览器时,它将关闭服务器上的会话。然而,我只是想强调,这个解决方案可能不是100%的工作时间,因为有机会,当用户关闭浏览器,他没有连接到互联网。这个链接可能对你有所帮助。关闭

最好的办法是在"onbeforeunload"函数中调用一些ajax。然后,这个ajax将调用一个服务器页面,该页面将设置您的"db中的值"。

然而,使用"onbeforeunload"是不赞成的,如果它阻止用户关闭浏览器。