繁体   English   中英

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

[英]Ending a session on browser close only

当他们关闭浏览器时,我试图结束用户的会话,因为他们从未正确注销。

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

<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.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标签上添加以下事件处理程序:

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

现在,当用户关闭浏览器时,它将关闭服务器上的会话。 但是,我只是想强调一点,因为用户关闭浏览器时,他可能没有连接到Internet,所以该解决方案可能无法100%地工作。 此链接可能会对您有所帮助。 在浏览器关闭时终止会话

最好的选择是在“ onbeforeunload”函数中调用一些ajax。 然后,此ajax将调用一个服务器页面,该页面将设置您的“ db中的值”。

但是,如果使用“ onbeforeunload”会使用户无法关闭浏览器,则将无法使用。 这被认为是不良做法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM