在我的localhost和amp;之间返回值的问题我的域名

时间:2009-04-17 15:26:30

标签: php xampp redhat

我的localhost(xampp windows)和我的域(FC7 linux)之间存在一个令人困惑的区别。我有一个包含大量数据库驱动选择列表的页面。在更新时,这些值将传递到更新数据库的页面并向用户确认。 (我正在直接监视我的数据库,这是正确发生的)

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

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

3 个答案:

答案 0 :(得分:1)

您获得的错误答案很可能来自缓存。

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

您在寻找什么:

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

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

其他一些有趣的事情:

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

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

答案 1 :(得分:0)

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

这听起来像是存在浏览器缓存问题,或者是加载数据的异常顺序,但我们需要更多详细信息来了解如何复制它。

答案 2 :(得分:0)

我一直在研究这个问题。事实证明,这个缓存问题只发生在通过我的互联网提供商访问网站时! (如果我从家里或通过其他提供商访问它,那就没问题)。

**稍微纠正我原来的帖子**我必须(1)重新加载页面(2)保留网址