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


Updating MySQL database when user closes browser

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

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

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

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

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

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

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

以下是浏览器关闭事件的简单解决方案。我在"onunload"answers"beforeunload"事件中遇到了一些问题。浏览器关闭、选项卡关闭、任何链接点击、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>