c# - 仅在浏览器关闭时结束 session

标签 c# javascript asp.net

我试图在用户关闭浏览器时结束他们的 session , 因为他们永远不会正确注销。

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

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

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

关于c# - 仅在浏览器关闭时结束 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24524265/

相关文章:

c# - EntityFramework 中的 ObjectDisposedException

c# - 如何在 Silverlight 中使控件可调整大小

c# - 在泛型类中强制转换

c# - 有什么可以与#pragma message 相提并论的吗?

javascript - jQuery 值帮助

javascript - react : event handling in ES8

javascript - jquery-ui按钮集点击事件似乎没有改变选中状态

ASP.Net MVC 3 - 密码保护 View

html - 如何让页面并排的2个DIV内容独立向下或向上滚动而不使用框架?

c# - 从主键获取 SQL 外键列值 asp.net c#