0

我的本地主机(xampp windows)和我的域(FC7 linux)之间有一个令人困惑的区别。我有一个包含很多数据库驱动选择列表的页面。更新时,这些值被传递到更新数据库并向用户确认的页面。(我正在直接监控我的数据库,这正在正确发生)

有一个菜单选项可以返回到输入页面。在我的 locahost 上选择此项将正确返回具有更新值的页面。在我的域上选择此项将返回具有原始值的页面(例如,php 脚本似乎未运行)。我必须刷新(调用查询)然后重新加载(将值加载到字段中)以获取要显示的新值。

迄今为止,我的经验是使用模板将 PHP 和 HTML 分开,所以我以前从未遇到过这个问题。我尝试了许多替代方案,但效果不大 - 有什么想法吗?

4

3 回答 3

1

您得到的错误响应很可能来自缓存。

您可以使用HTTP 标头查看器来找出您的服务器发送的缓存标头,或者您可以使用 Firefox 的LiveHTTPHeaders插件来确定。

您在寻找什么:

  • Expires:标头告诉浏览器在特定日期之前重新使用同一页面进行进一步的请求,而无需从服务器进行检查。Cache-Control:标头中的max-age=部分也是如此。也就是说,如果您看到 Expires 标头或 max-age 部分,则浏览器可能会返回陈旧(过期)页面而无需返回服务器。

您的服务器或浏览器与服务器之间的代理服务器很可能会自动将此类缓存验证器添加到您的页面中,而您本地主机上的服务器却没有。如果是这样,您可以尝试删除它们。也许服务器管理员已经配置了 mod_expires(你可以在 .htaccess 中覆盖它)。如果它是由您的浏览器和服务器之间的代理服务器引起的,您可能没有太多选择。

其他一些有趣的事情:

  • 如果某个操作更改服务器上的某些内容很重要,那么您应该使用 POST 请求而不是 GET 请求。对 POST 请求的响应永远不会被缓存(尽管,如果您执行Post-Redirect-Get,那么它之后的 get 可能是,但那是另一回事了)。
  • 请注意,当您在“localhost”访问某些内容时,与在任何其他域访问它相比,您的浏览器缓存的行为可能会有所不同,即使服务器配置相同并发送相同的标头也是如此。至少 Firefox 是这种情况(我自己见过)。IE 也有不同的安全区域,这可能会影响缓存,使其在 localhost 上的行为有所不同。
  • 您可以强制您的服务器输出一个Cache-Control: no-cache标头和一个Pragma: no-cache标头。这可以在 PHP 中通过两次调用 header() 函数来完成。虽然浏览器和代理不应该默认为在没有给出验证器时可以返回陈旧结果的行为,但这至少明确表明您绝对不希望缓存某些内容。

另请注意,如果您通过代理服务器访问 Web,这也可能会影响某些事情,包括您收到的缓存标头。

于 2009-04-17T17:22:45.540 回答
0

刷新,然后重新加载?是否存在将数据加载到选择框中的页面交互?

听起来这里存在浏览器缓存问题,或者加载数据的顺序不寻常,但我们需要更多细节来了解如何复制它。

于 2009-04-17T15:33:33.477 回答
0

我一直在进一步研究这个。事实证明,仅当通过我的工作互联网提供商访问该站点时才会出现此缓存问题!(如果我从家里或通过其他提供商访问它就可以了)。

**对我的原始帖子稍作更正**我必须 (1) 重新加载页面 (2) 保留 URL

于 2009-04-21T07:31:42.337 回答