Javascript 触发注销的onbeforeunload事件窗口
我遇到了许多关于堆栈溢出的答案,这些答案说明了当浏览器关闭时JavaScript是如何无法检测的。在大多数情况下,这是正确的,但我发现下面的代码似乎能够检测到浏览器关闭Javascript 触发注销的onbeforeunload事件窗口,javascript,jquery,ajax,window,onbeforeunload,Javascript,Jquery,Ajax,Window,Onbeforeunload,我遇到了许多关于堆栈溢出的答案,这些答案说明了当浏览器关闭时JavaScript是如何无法检测的。在大多数情况下,这是正确的,但我发现下面的代码似乎能够检测到浏览器关闭 window.onbeforeunload = function(){ $.ajax({ type: "POST", url: "logout.php" }); } 在一个完美的世界中,用户要么自己注销,要么闲置足够长的时间以自动注销,但情况并非总是如此 因此,我使用上面的代码在用户关闭浏览器时调
window.onbeforeunload = function(){
$.ajax({
type: "POST",
url: "logout.php"
});
}
在一个完美的世界中,用户要么自己注销,要么闲置足够长的时间以自动注销,但情况并非总是如此
因此,我使用上面的代码在用户关闭浏览器时调用logout.php脚本
这是我的问题:当浏览我的站点时,它似乎总是随机的,上面的脚本被调用,用户当然被注销
在它发生之前,我可以浏览到一页或来回浏览多页。有时它会在登录时立即被调用,我甚至无法进入该站点
我不明白为什么会发生这种情况,尤其是随机发生的
编辑
添加logout.php脚本:
<?php
include ('include/sessions.php');
$update = "UPDATE users SET lastlogoutdate = NOW(), currentlyloggedin = 'N' WHERE username = '$username'";
$updateQuery = mysqli_query($dbc, $update);
session_destroy();
header('Location: index.php');
?>
这句话可能对你或某些人有帮助
window.onbeforeunload = function(){
if(event.clientX <=0 || event.clientY <=0)
{
$.ajax({
type: "POST",
url: "logout.php"
});
}
}
window.onbeforeunload=函数(){
如果(event.clientXlogout.php
实际上是如何执行注销的?它是清除cookie还是更重要?onbeforeunload
应该在导航发生时随时被调用。@phuzi-我没有使用cookie。我包括了上面的logout.php脚本。您不清除cookie客户端有什么原因吗?onbeforeun每次您离开当前文档时,都会调用load
,无论是使用后退、前进还是关闭按钮。如果注销,则调用php
,这取决于网络延迟,而且非常不可靠。@JohnBeasley这很有意义,从技术上讲,他们仍然登录,因此看起来登录是正确的。cookie存在,并且会话仍然存在如果他们重新访问您的站点,他们也不必再次登录。不活动注销是您在服务器端执行的操作。您可能会错过很多情况,例如:internet连接丢失,pc/笔记本电脑/平板电脑在浏览器未关闭的情况下被发送到睡眠模式,pc崩溃/笔记本电脑/平板电脑等。因此,会话的生命周期必须定义为服务器端,对于从客户端到服务器的每次连接,会话都可以延长。您应该解释为什么这可以解决问题。因为这看起来是一个非常不可靠的检查。我刚刚完成测试。不幸的是,当我关闭浏览器时,它不会调用徽标php脚本并更新表。上面我包括了一个确定用户是否单击关闭按钮的决策。在每个卸载情况下,Ajax调用触发器都会有其他明智的选择,但为什么这有助于检测关闭按钮上的单击。关闭按钮的位置没有标准化。关闭也可以使用键盘完成。想想看问题比问题多。