Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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
PHP Javascript?当用户关闭页面或浏览器时执行某些操作_Php_Javascript_Mysql_Session_Browser - Fatal编程技术网

PHP Javascript?当用户关闭页面或浏览器时执行某些操作

PHP Javascript?当用户关闭页面或浏览器时执行某些操作,php,javascript,mysql,session,browser,Php,Javascript,Mysql,Session,Browser,可能重复: 基本上,我希望通过更新MySQL数据库将用户设置为“脱机”,并可能在他们关闭浏览器或页面时结束会话 我看过一个这样做的网站 有谁能解释一下它是如何完成的,并给出一个例子吗 高级版谢谢。当用户离开页面/关闭选项卡时,您可以使用来触发AJAX调用 window.onunload = function(){ // AJAX call to mark user "offline" } 编辑:我建议在点击链接时设置一个变量,这样只有当用户离开页面时才会运行 使用jQuery,可以这样做

可能重复:

基本上,我希望通过更新MySQL数据库将用户设置为“脱机”,并可能在他们关闭浏览器或页面时结束会话

我看过一个这样做的网站

有谁能解释一下它是如何完成的,并给出一个例子吗

高级版谢谢。

当用户离开页面/关闭选项卡时,您可以使用来触发AJAX调用

window.onunload = function(){
  // AJAX call to mark user "offline"
}
编辑:我建议在点击链接时设置一个变量,这样只有当用户离开页面时才会运行

使用jQuery,可以这样做:

$('a').click(function(){ // Run for all links
  $('body').data('linkClicked', true); // Set global variable
});

$(window).unload(function(){ // jQuery version of window.onunload
   if(!$('body').data('linkClicked')){ // Check global variable
      $.ajax({
        url: 'url',
        data: {some: data},
        async: false // this locks the browser, but it may be needed to make
                     // sure the ajax call runs before the tab is closed
      });
   }
});

我将使用jQuery执行此任务。。类似于此,并使用上面提到的window.onunload:

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

当页面被关闭或导航离开时,唯一可以做的事情就是将事件处理程序附加到卸载事件,正如Rocket建议的那样。然而,你不应该依靠这个事件来触发,因为很多事情可能会阻止它。浏览器可能会停止,以便将其资源集中到其他任务上,用户可能会断开连接,浏览器可能会终止,等等

跟踪用户和会话最可靠的方法是让他们以给定的间隔向服务器发送keepAlive消息。然后您将知道用户在给定的时间戳和keepAlive消息的间隔之间留下了一段时间

在服务器上,您可以遍历一段时间未保持活动状态的会话,并执行所需的任何操作


但是,如果您只需要创建一些很酷的“注销”效果,那么这种方法就没有必要了。

是的,这是可行的,但请注意Sami,我认为这也会在页面更改时触发。因此,如果用户点击你网站上另一个部分的链接,这会被炒鱿鱼。每次页面更改后,这不会触发吗?是的,我想是的。我对jQuery一无所知,如何使用它呢?@SamiDzHamida:是的,我想是的。您可以在单击链接时设置一个全局变量(并在此函数中进行检查),使其仅在页面关闭时运行。@SamiDzHamida:查看我的编辑。