Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 触发注销的onbeforeunload事件窗口_Javascript_Jquery_Ajax_Window_Onbeforeunload - Fatal编程技术网

Javascript 触发注销的onbeforeunload事件窗口

Javascript 触发注销的onbeforeunload事件窗口,javascript,jquery,ajax,window,onbeforeunload,Javascript,Jquery,Ajax,Window,Onbeforeunload,我遇到了许多关于堆栈溢出的答案,这些答案说明了当浏览器关闭时JavaScript是如何无法检测的。在大多数情况下,这是正确的,但我发现下面的代码似乎能够检测到浏览器关闭 window.onbeforeunload = function(){ $.ajax({ type: "POST", url: "logout.php" }); } 在一个完美的世界中,用户要么自己注销,要么闲置足够长的时间以自动注销,但情况并非总是如此 因此,我使用上面的代码在用户关闭浏览器时调

我遇到了许多关于堆栈溢出的答案,这些答案说明了当浏览器关闭时JavaScript是如何无法检测的。在大多数情况下,这是正确的,但我发现下面的代码似乎能够检测到浏览器关闭

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.clientX
logout.php
实际上是如何执行注销的?它是清除cookie还是更重要?
onbeforeunload
应该在导航发生时随时被调用。@phuzi-我没有使用cookie。我包括了上面的logout.php脚本。您不清除cookie客户端有什么原因吗?
onbeforeun每次您离开当前文档时,都会调用load
,无论是使用后退、前进还是关闭按钮。如果
注销,则调用php
,这取决于网络延迟,而且非常不可靠。@JohnBeasley这很有意义,从技术上讲,他们仍然登录,因此看起来登录是正确的。cookie存在,并且会话仍然存在如果他们重新访问您的站点,他们也不必再次登录。不活动注销是您在服务器端执行的操作。您可能会错过很多情况,例如:internet连接丢失,pc/笔记本电脑/平板电脑在浏览器未关闭的情况下被发送到睡眠模式,pc崩溃/笔记本电脑/平板电脑等。因此,会话的生命周期必须定义为服务器端,对于从客户端到服务器的每次连接,会话都可以延长。您应该解释为什么这可以解决问题。因为这看起来是一个非常不可靠的检查。我刚刚完成测试。不幸的是,当我关闭浏览器时,它不会调用徽标php脚本并更新表。上面我包括了一个确定用户是否单击关闭按钮的决策。在每个卸载情况下,Ajax调用触发器都会有其他明智的选择,但为什么这有助于检测关闭按钮上的单击。关闭按钮的位置没有标准化。关闭也可以使用键盘完成。想想看问题比问题多。