php - jquery - 当新数据跨浏览器 session 存储到表中时刷新页面

标签 php jquery mysql

环境:PHP/MySQL/Jquery

当新数据存储到表(例如:new_entry_table)中时,我想刷新页面(例如:index.php),每隔一分钟检查一次。同一页面将同时在许多机器(电脑浏览器)中打开,当新数据出现时,所有机器都应该刷新。

使用 jquery 和数据库检查我尝试了以下操作:

setInterval(function(){
$.post("new_data_check.php", function(data) { 
   if(data > 0){ 
       $("#container").fadeOut('fast').load(location.reload());
   } 
   });
   return false;
},60000);

new_data_check.php:
: checks for new data in the test_db where newdata_field=0 ;
: If any new data arises echo "1"; And update the newdata_field=1; to stop constantly refreshing the page.
: else echo "0";
: Just for a trigger

所以上面的 jquery 代码每 1 分钟检查一次 new_data_check.php 是否有触发器,如果​​出现任何触发器,它将刷新容器。但是它只刷新一个打开的 session ,其他打开的 session (在其他浏览器或其他电脑中)不会刷新焕然一新。

建议一个更好的方法来做到这一点。谢谢。

最佳答案

您的 new_data_check.php 文件需要跟踪所有独立查看该页面的用户。

如果没有,就会发生这种情况:

  • 用户 1 和用户 2 均已登录该站点。
  • 用户 1 在用户 1 之前 5 秒进行检查,有新数据。
  • 用户 1 完成了他的请求。服务器清除 new_data 位。
  • 用户 2 的请求在 5 秒后到达。他执行了他的请求,但此时,用户 1 已将 new_data 字段设置为 0。他的数据已过时,但用户 1 已有效地选择了他。

从表面上看,您没有向它提供任何可以识别用户身份的信息 - 除非服务器使用 IP 地址来确定这一点。如果是这种情况,请记住,小型网络后面的每个人都可能拥有相同的外部 IP 地址。因此它无法区分办公室里的人。

您可以做的是为每个 session 生成某种唯一的哈希值并将其传递给浏览器。然后 JavaScript 可以为 php 脚本提供相同的标记。

另一种没有任何特殊位的解决方案是随请求传递时间戳。本质上,客户端说“我的最新数据于晚上 9:21:53 到达”,服务器然后检查并响应“我最新的数据是在那之前创建的,所以你仍然很好。”或“我已经得到了于晚上 9:22:53 创建或修改的内容,您应该下载它。”

使用这种方法,您无需担心谁是谁。相反,您需要对正在检查是否陈旧的数据进行修改/创建时间。您还需要确保客户端时钟正确同步 - 更好的是,不要信任客户端的日期和时间信息。也许利用您的 new_data_check.php 为脚本提供可以在后续请求中传递的时间戳。

关于php - jquery - 当新数据跨浏览器 session 存储到表中时刷新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190083/

相关文章:

php - include() 从终端而不是从网络运行时失败

php - 如何获取所有数组元素,其中值只在数组中出现一次?

php - 我应该在每次查询之前 ping mysql 服务器吗?

javascript - 页面布局略有变化,样式无变化

javascript - jquery 缩短数字长度(将兆字节转换为千兆字节)

javascript - 使用 jQuery slideToggle() 不显示 :none?

PHP - 将 PDO 与 IN 子句数组一起使用

PHP mysql 在两个表中搜索一个值然后将其合并

MySQL:如何在特定节点中查找叶子

mysql - docker-compose 未知 MySQL 服务器主机 'mysql'( Airflow )