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

时间:2014-07-02 06:26:51

标签: c# javascript asp.net

我正在尝试在关闭浏览器时结束用户的会话, 因为他们从未正常退出。

我需要在关闭浏览器后更改数据库中的值。

<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>

这适用于关闭浏览器,但在重定向到任何其他页面时也是如此。

有没有办法只为浏览器关闭?

捐赠。

2 个答案:

答案 0 :(得分:1)

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

首先创建一个页面AutoLogOut.aspx并在Page_Load事件中编写此代码: -

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 onunload="bodyUnload();" onclick ="clicked=true;>

现在,当用户关闭浏览器时,它将关闭服务器上的会话。但是我想强调一下,这个解决方案可能无法100%工作,因为有可能当用户关闭浏览器时,他没有连接到互联网。 此链接可能对您有所帮助。 Kill Session on Browser Close

答案 1 :(得分:1)

你最好的选择是在你的&#34; onbeforeunload&#34;中打电话给ajax。功能。然后,这个ajax会调用一个服务器页面来设置db&#34;中的&#34;值。

然而使用&#34; onbeforeunload&#34;如果它阻止用户关闭浏览器,那就不赞成了。这被认为是不好的做法。