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 显示为 <iframe>
时:在这种情况下它不会重新加载(第 4 步没有完成)。
这似乎只发生在 IE7 中(不知道 IE8),它在 FF/Safari 上完美运行。
只有在使用<iframe>
时,如果页面 A.php 不在<iframe>
中,它也会在 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>的主要内容,如果未能解决你的问题,请参考以下文章