IE9没有在帖子之间清除缓存

时间:2013-02-21 13:18:15

标签: internet-explorer session post http-headers browser-cache

我有一个页面可以执行以下操作:

  1. 点击按钮提交表单
  2. 将页面发布到自身,并执行SQL查询以更新数据库中的字段。
  3. 然后,代码检查查询执行中是否存在任何受影响的行,并进行回显。我希望它能回显受影响的行“1”
  4. 在Firefox,Safari和Chrome中,此操作每次都可以正常运行。 在IE9中,它第一次工作,可能是2次甚至3次,然后它会做一些奇怪的事情 - 它回应受影响的行“0” - 即使查询执行得很好(数据库已更新)。

    我认为这是某种缓存问题,因为当我在步骤1(提交表单)之前清除IE中的浏览器缓存时,它会根据需要每次都有效。

    我尝试过使用此代码:

    header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
    header('Pragma: no-cache'); // HTTP 1.0.
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
    

    这是<head>标记:

    <meta http-equiv="Cache-Control" content="no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT" />
    

    发生了什么事?我怎么能阻止IE这样播放?

    更新

    似乎与PHP PDO的rowCount()(用于获取受影响的行)存在某种不一致...在我的情况下,我无法想象如何,但不一致性与浏览器缓存相关联。执行查询后,我执行SELECT以确定是否使用新的val更新了字段,而不是使用rowCount()。这似乎始终如一。

1 个答案:

答案 0 :(得分:0)

执行查询后,不要使用PDO的rowCount(),而是执行SELECT查询以确定是否使用新的val更新了字段。

伪代码/ SQL:

  1. 更新表格字段='新值',其中field ='old value'
  2. 从表格中选择一行,其中field ='new value'
  3. 如果返回了行,则字段已更新