首页 > 解决方案 > PHP 页面似乎为某些用户缓存,但不为其他用户缓存?

问题描述

我有一个奇怪的情况,我希望有人可能以前经历过这种情况并且知道可能的情况可能会导致这种情况发生。

我有一个 PHP 网站,可以访问 SQL 数据库中的数据。用户填写表格以添加或编辑已发布的数据并将数据写入数据库。如果用户正在编辑现有数据,则 php 会加载表单所需的数据,一旦页面加载,我会使用 JavaScript 将数据填充到适当的字段中。

在我测试过的所有机器和大多数用户上,所有这些对我来说都是正确的。

但是...一些用户报告说他们在表单中没有看到正确的数据,而是看到了过时的信息。因此,当这些用户“编辑”表单时,他们看到的不是数据库中当前包含的信息,而是旧信息。

我的理解是(通常)php 文件不会被缓存,因为它们是在服务器上执行的,然后最终产品被交给用户。是否有任何情况可能导致某个用户在从服务器接收到这些“组装”文件后以某种方式缓存它们,然后在下次加载页面时重新加载?

例子:

今天,一位客户试图使用表单编辑信息。他们打电话给我是因为某个字段显示不正确。

我登录到我的网站并加载了相同的表单。我的表单显示了正确的数据(包含在 SQL 数据库中),而他们的表单显示了不同的数据。

两个不同的用户使用相同的浏览器(chrome)查看相同的 php 网页和相同的表单,这应该显示相同的数据,但事实并非如此。

我很困惑如何追踪这个问题并解决它。

更新:

玩了一会儿之后,我怀疑这可能是客户端的浏览器或互联网比大多数慢一点的问题,这可能导致 Javascript 在页面完全加载之前执行。

我将其更改为使用 jQuery 执行 javascript onload,这可能会解决问题,直到我可以重新编写更优雅的解决方案,但尚未收到此特定客户端的回复,所以不知道这是否为他们解决了问题。 .但它肯定不会受到伤害。

标签: javascriptphpsqlcaching

解决方案


也许浏览器正在缓存页面?
为确保浏览器没有缓存,请在 PHP 中尝试

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

推荐阅读