用户关闭浏览器时更新MySQL数据库

时间:2012-09-13 09:40:44

标签: php mysql

我正在为一家研究公司开发一个Web应用程序,其中一个要求是用户一次只能登录一台设备。

所以我开发了一个非常基本的系统,当你登录一些PHP更新数据库中用户的行从0到1时,当你点击注销按钮时,它再次从1到0更新该行。

唯一的问题是,如果用户不使用注销按钮并且只是关闭浏览器,它将结束会话并将其注销,但数据库中的行将不会更新。

有没有办法在浏览器关闭时更新数据库?

3 个答案:

答案 0 :(得分:5)

您可以使用unload事件向服务器发送ajax请求,该服务器将更新mysql中的标志。您可以尝试遵循jquery语法。

$(window).bind('unload', function(){
    $.ajax({
        type: 'get',
        async: false,
        url: 'path/to/file.php'
    });
});

答案 1 :(得分:5)

没有可靠的方法。你可以在页面关闭时调用一个javascript函数,然后向你的服务器发出一个请求,告诉它会话已经完成,但是:javascript可能会被关闭,甚至可能根本没有执行。最好的办法是使用超时:存储最后一次操作的时间。如果超过10分钟,会话“到期”。

答案 2 :(得分:1)

这是浏览器关闭事件的简单解决方案。我遇到了“onunload”和“beforeonunload”事件的一些问题。它将在浏览器关闭,标签关闭,任何链接点击,URL更改时触发。所以我定制了这样的代码。

 <script type="text/javascript">
        jQuery(document).ready(function() { 
          var validNavigation = false;

          // Attach the event keypress to exclude the F5 refresh
          $(document).bind('keypress', function(e) {
            if (e.keyCode == 116){
              validNavigation = true;
            }
          });

          // Attach the event click for all links in the page
          $("a").bind("click", function() {
            validNavigation = true;
          });

          // Attach the event submit for all forms in the page
          $("form").bind("submit", function() {
            validNavigation = true;
          });

          // Attach the event click for all inputs in the page
          $("input[type=submit]").bind("click", function() {
            validNavigation = true;
          }); 

          window.onbeforeunload = function() {                
              if (!validNavigation) {                            
                 var status = 'abandoned';
                    $.ajax({
                        type: "POST",
                        url: your action URL,
                        data: "status=" + status,
                        success: function(res) {
                        },
                    });
              }
          };
        }); 
    </script>