在浏览器退出时更新数据库


update database on browser exit

是否有人知道如何更新mysql数据库,如果用户退出浏览器或导航离开一个页面?我有一个值设置为1,并希望它设置为0在这样的事件。几个星期以来,我一直在为此绞尽脑汁,任何帮助都会非常感激,谢谢。我正在使用PHP。我已经尝试了它的身体卸载,但它不做我想要的。

不要那样做。原因很简单,因为您依赖浏览器向您发送通知(通过beforeunload事件)或其他机制。如果浏览器崩溃,或者用户将他的计算机设置为睡眠/休眠状态,将会发生什么?

您可以考虑其他选项,例如PING!方法,浏览器可以通过Ajax每隔1分钟左右发送一次调用,告诉他还活着。您所需要做的就是创建一个MySQL过程,它将扫描任何超过1:30分钟的"活动"条目(称为last_seen TIMESTAMP或其他),并将其"活动"设置为0。这个过程可以在随机请求时调用(很像PHP会话清理机制)。

这将确保用户仍然在那里,因为您将获得PING!当用户停止时,您可以放心地说他不会PING!(虽然它会造成轻微的延迟,但这是可以接受的)。这也将确保用户的安全。

PHP只能在页面被访问时更改内容。从PHP的角度来看,一旦脚本结束,事务就结束了,它与该页不再有任何关系。

要做到这一点,唯一的方法是保持连接打开,脚本运行,并使用如下命令:
<?php
  function shutdown()
  {
     // here you change the value on your db...
  }
  register_shutdown_function('shutdown');
 // send the data to client
  echo "anything";
  flush();
  // sleep for a lot of time... 99999 seconds...
  sleep(99999);
?>