【问题标题】:PHP Javascript? Do something when user closes page or browser [duplicate]PHP Javascript?当用户关闭页面或浏览器时做一些事情[重复]
【发布时间】:2012-03-03 07:46:47
【问题描述】:

可能重复:
How can I destroy sessions if user closes the browser window or navigates away from page in php?

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

我见过一个这样做的网站。

谁能解释一下它是如何完成的并发布一个例子吗?

先谢谢你了。

【问题讨论】:

    标签: php javascript mysql session browser


    【解决方案1】:

    当用户离开页面/关闭选项卡时,您可以使用window.onunload 触发 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
          });
       }
    });
    

    【讨论】:

    • 是的,这是可行的,但请注意 Sami,我认为这也会在页面更改时触发。因此,如果用户单击指向您网站上另一个部分的链接,这将被触发。
    • 每次页面更改后都会触发这个吗?
    • 是的,我是这么认为的。使用 jQuery 怎么做,因为我对此一无所知。
    • @SamiDzHamida:是的,我想是的。您可以在单击链接时设置一个全局变量(并在此函数中检查),以便它仅在页面关闭时运行。
    • @SamiDzHamida:看看我的编辑。
    【解决方案2】:

    我将使用 jQuery 来执行此任务.. 类似这样并使用上面提到的 window.onunload:

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

    【讨论】:

      【解决方案3】:

      正如 Rocket 所建议的,当页面关闭或导航离开时,您可以做某事的唯一方法是将事件处理程序附加到 unload 事件。但是,您不应该依赖此事件来触发,因为很多事情可能会阻止它。浏览器可能会停止它以便将其资源集中在其他任务上,用户可能会失去连接,浏览器可能会被终止,等等。

      跟踪用户和会话的最可靠方法是让他们以给定的时间间隔向服务器发送 keepAlive 消息。然后你就会知道用户在给定的时间戳和keepAlive消息的间隔之间的某个时间离开了。

      然后在服务器上,你可以遍历一段时间没有保持活动的会话,并执行你需要的任何操作。

      但是,如果您只需要创建一些很酷的“注销”效果,则不需要这种方法。

      【讨论】:

        猜你喜欢
        • 2015-11-02
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-23
        • 2015-02-03
        • 1970-01-01
        相关资源
        最近更新 更多