我正在尝试在关闭浏览器时结束用户的会话, 因为他们从未正常退出。
我需要在关闭浏览器后更改数据库中的值。
<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>
这适用于关闭浏览器,但在重定向到任何其他页面时也是如此。
有没有办法只为浏览器关闭?
捐赠。
答案 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;如果它阻止用户关闭浏览器,那就不赞成了。这被认为是不好的做法。