PHP 标头重定向不会在 IE 中重新加载 <iframe>

Posted

技术标签:

【中文标题】PHP 标头重定向不会在 IE 中重新加载 <iframe>【英文标题】:PHP header redirection does not reload <iframe> in IE 【发布时间】:2011-02-26 03:33:11 【问题描述】:

显示来自 DB 的数据时我通常会遇到这种情况

    我在显示来自 DB 的数据的 A.php 页面中, 用户执行一些操作(如编辑/删除等)并加载页面 B.php 以执行该操作, 一旦页面 B 执行操作,它将浏览器重定向到页面 A, 页面 A 在步骤 (3) 期间自动重新加载,因此它显示了数据的更新情况

为了使页面 B 重定向到页面 A,我使用了一个简单的 PHP

header("Location: " . "A.php", TRUE, 302);

这适用于所有情况,除了页面 A.php 显示为 &lt;iframe&gt; 时:在这种情况下它不会重新加载(第 4 步没有完成)。 这似乎只发生在 IE7 中(不知道 IE8),它在 FF/Safari 上完美运行。 只有在使用&lt;iframe&gt; 时,如果页面 A.php 不在&lt;iframe&gt; 中,它也会在 IE7 中刷新。

为了解决这个问题,我只是在页面 A.php 中添加了几个标题以将其设置为不被缓存:

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

但我很好奇您过去是否也遇到过同样的问题,您能否就此给我一些建议?

【问题讨论】:

【参考方案1】:

我在 IE11 之前看到过这种情况。首先,在某些情况下,当您的重定向 URL 与原始 iframe URL 具有相同的协议时,IE 会播放得更好。

此外,许多人能够通过添加 P3P 标头来解决类似问题。尝试在发送重定向标头之前添加:header('P3P: CP="CAO PSA OUR"')

【讨论】:

【参考方案2】:

内容是否与“外部”框架在同一个域中?

如果没有,您可能需要提供完整路径“http://...etc”。在 header() 调用中。

【讨论】:

我总是在标头中提供完整的 url,它是 HTTP 要求。【参考方案3】:

您正在使用会话吗?如果是这样,您能否在没有会话且没有修复的情况下再次测试您的场景?

您所做的修复处理缓存控制和过期,由session_start() 和/或session_cache_limiter() 更改。不过,这种行为很奇怪,可能是 IE-7 特有的错误。

【讨论】:

以上是关于PHP 标头重定向不会在 IE 中重新加载 <iframe>的主要内容,如果未能解决你的问题,请参考以下文章

IFRAME 中的 PHP“标头(位置)”,加载到 _top 位置?

PHP标头未重定向到感谢页面

标头重定向后未定义PHP会话索引?

使用参数重新加载页面

标头重定向后PHP $_SESSION为空

IE9 重定向缓存、字体和跨域资源共享 (CORS) CDN HTTP 标头