【问题标题】:PHP stores variables in cachePHP 将变量存储在缓存中
【发布时间】:2014-03-24 05:12:43
【问题描述】:

我的网站遇到了这个问题,我从数据库中获取了一些值,我将其显示在页面上的表格中,然后您可以从该页面更改值。但是当我更改值时,运行更新字段的 MySQL 查询,并使用

    header("Location: contact.php")

返回显示值的页面。但在我按下 Ctrl+F5 之前,这些值不会更改为新值。有什么方法可以阻止网站存储数据并立即显示新数据?

【问题讨论】:

    标签: php html mysql caching header


    【解决方案1】:

    很简单,只需在header方法中添加一个随机的GET请求如下:

    header("Location: contact.php?dummy=")

    可以正常工作,您还可以使用随机方法将随机值传递给dummy=<some random value> 以获得更好的性能...

    【讨论】:

    • 为什么会这样?而且我已经传递了一个带有 id 的 get,php 知道从数据库中获取什么信息
    • 缓存是由客户端浏览器专门完成的(如果你可以手动禁用它。)。因此,当您将脚本重定向到相同的 url(即其本身)​​时,浏览器打算显示缓存的结果以节省时间。但是,当您指定 GET 时,它现在需要更新的结果,因此,完全显示服务器响应的新值。
    • 但是如前所述,该网站的链接是:/contact.php?id=1 但它仍然不会自动更新
    • 是的,我注意到了……但是更新前后的链接不一样吗???? (即 id=1 对该用户保持不变)每当浏览器找到与当前相同的 url 加载时,它都会显示缓存结果这就是为什么我说要在 dummy 变量中包含随机值,这使得 url 'LOOK'每次重新加载时浏览器的部分都会有所不同。从而避免缓存结果的机会。如果您有一个id=1,那么网址将是:$url="/contact.php?id=1&dummy=".rand(); header("Location: $url");
    • 谢谢,帮了大忙!只是错过了 $_GET 每次都必须不同的部分。
    【解决方案2】:

    正如@Anirban 所提到的,听起来您确实遇到了缓存问题。但是,如果您实际上并不希望缓存结果,那么最好首先防止缓存,而不是让浏览器存储一堆它不会使用的数据。您可以添加这些标题:

    header('Cache-Control:no-cache, no-store, must-revalidate')
    header('Pragma:no-cache')
    header('Expires:0')
    

    contact.php 文件顶部的 PHP 代码中。

    【讨论】:

    • 感谢您的回答,但我已经尝试过了。我尝试了缓存问题建议的所有可能的 Meta 标记,但它们都不起作用。
    猜你喜欢
    • 2021-06-22
    • 2011-08-05
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 2016-06-17
    相关资源
    最近更新 更多