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

C# 仅在浏览器关闭时结束会话,c#,javascript,asp.net,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

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

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

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

window.onbeforeunload=检查;
函数检查(){
return“是否确实要退出此页面?”;
//或者在用户关闭web//browser时,放置任何需要调用的函数。
endSession();
}
这确实可以关闭浏览器,但不幸的是,当我重定向到任何其他页面时

是否有任何方法仅在浏览器关闭时执行此操作


格兰特。

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

首先创建一个页面AutoLogOut.aspx,并在页面加载事件中编写以下代码:-

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

var=false;
函数CheckBrowser()
{
如果(单击==false)
{
//浏览器关闭
}
其他的
{
//重定向
单击=假;
}
}
函数bodyUnload()
{
如果(单击==false)//浏览器关闭
{
var-request=GetRequest();
打开(“GET”,“AutoLogOut.aspx”,true);
request.send();
}
}
函数GetRequest()
{
var请求=null;
if(window.XMLHttpRequest)
{
//如果使用IE7、FF、Opera和Safari浏览器
请求=新的XMLHttpRequest();
}
其他的
{
//适用于IE 6.x和IE 5.x等旧浏览器
请求=新的ActiveXObject('MSXML2.XMLHTTP.3.0');
}
返回请求;
} 
最后,在body标记上添加以下事件处理程序:-

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

最好是在“onbeforeunload”函数中调用一些ajax。然后,这个ajax将调用一个服务器页面来设置“数据库中的值”


但是,如果使用“onbeforeunload”阻止用户关闭浏览器,则表示不赞成。这被认为是不好的做法。

由于http的无状态性质,在浏览器js领域,关闭/重定向/重新加载都被认为是相同的。正如我所说,也有人指出,没有完全证明技术。它可能有效,也可能无效。您的答案的更新版本有效,谢谢,但在firefox上不行,我需要它。这种联系很有帮助。