【问题标题】:PHP, HTTP_REFERER not working on iframe?PHP,HTTP_REFERER 在 iframe 上不起作用?
【发布时间】:2010-12-27 22:14:44
【问题描述】:

好的,这是我的情况。

我有一个页面,index.php,它是主站点(flash 站点)

我有另一个名为 iframe.php 的页面,其中包含 index.php 的 iframe

另一个页面,test.php。里面有2个链接,第一个链接直接指向index.php,另一个链接指向iframe.php

我测试过:

  • 我单击第一个链接,当我跟踪/回显 HTTP_REFERER 时,它显示“test.php”,但是

  • 我点击第二个链接,当我跟踪/回显 HTTP_REFERER 时,它显示“iframe.php”。

为什么会显示“iframe.php”? HTTP_REFERER 在 iframe 上不起作用吗?

当我点击第二个链接时,有没有办法得到“test.php”?

:index.php 的源代码

<html>
<head> // Some headers information
<script type="text/javascript" src="js/swfobject.js"></script>
<script type="text/javascript">
var flashvars = {};
    <?php
if(!empty($_SERVER['HTTP_REFERER'])){
?>
    flashvars.link       =  '<?php echo $_SERVER['HTTP_REFERER']; ?>';
<?php
}
?>
var params = {};
var attributes = {};
swfobject.embedSWF("main.swf, "content", "100%", "100%", "9", "expressInstall.swf", flashvars, params, attributes);
</script>
</head>
<body>
    <div id="content">
    <a href="http://www.adobe.com/go/getflashplayer">
            <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
        </a>
    </div>
</body>
</html>

iframe.php 的源代码

<html> headers tag
...
<body>
<center><iframe src="index.php" mce_src="index.php" frameborder="0" height="500" scrolling="no" width="500"></iframe></center>
</body>
</html>

test.php的源代码:

....
<a href="iframe.php" target="_blank">This is Iframe</a> <br><br>
....
<a href="index.php" target="_blank">This is normal link</a> <br><br>

【问题讨论】:

  • 请发布index.phptest.phpiframe.php 的源代码,以便我们尝试重现您的问题。
  • 罗杰。给我5分钟

标签: php iframe http-referer


【解决方案1】:

无论哪种情况,您都会看到index.php 的输出。原因如下:

场景 1)

当您从test.php 中的链接点击index.php 时,它会加载index.phptest.php 作为HTTP_REFERER)。

场景 2)

当您从test.php 中的链接点击iframe.php 时,它会加载iframe.php,它会在内部加载&lt;iframe&gt; 标记中的index.phpiframe.php 作为HTTP_REFERER)。

【讨论】:

  • 用源代码更新了我的问题。请看一下,看看有没有什么问题?
  • 不,结果不一样。当我点击普通链接时,它显示 test.php(这是正确的),但是当我点击 iframe 链接时,它显示 iframe.php。这就是为什么我在这里问这个问题。你和我的结果不一样?请问您使用的是什么操作系统和浏览器?
  • 顺便说一句,我使用的是 Windows Vista 和 firefox 3.5.5 作为我的互联网浏览器
  • 尝试注释掉iframe.php中的&lt;iframe&gt;标签。现在会发生什么?
  • 注释掉 iframe 标签?现在它是空白的,我查看了源代码,它也是空白的。我可以知道你得到了什么吗?我试过这个:我放入不同的文件。我的意思是,test1.php 和 iframe 链接中的正常链接是 test2.php。结果和我的一样,1 显示 test.php,另一个显示 iframe.php。恐怕保罗的回答是对的,“iframe 中显示的页面的 HTTP_REFERER 值将始终是包含 iframe 的父页面。”,您能确认一下吗?
【解决方案2】:

很遗憾,没有。在 iframe 中显示的页面的 HTTP_REFERER 值将始终是包含 iframe 的父页面。

无论如何,HTTP_REFERER 往往有点难以指望。如果您可以避免围绕它构建任何重要的逻辑,那么这样做是个好主意。

我猜你正在使用 php——也许你可以使用 session 来存储 test.php 加载时访问的最后一个页面?在 test.php 上,您设置 $_SESSION['referringPage'] = 'test.php';。然后在 index.php 上,读取$_SESSION['referringPage'] 的值,无论页面是否在 iframe 中加载,都会得到相同的信息。

【讨论】:

  • 通常我使用会话。但这一次,我做不到。我将只给我的客户链接,例如:This is iframe,我不能在这里做太多。或者你有更好的解决方案?我的条件:向客户端提供 1 个链接以检测以前的 URL。
  • @Paul:当您打开多个浏览器窗口/选项卡时,您推荐的$_SESSION 方法很容易出错。不同的请求可以覆盖彼此的会话值。
  • 啊..我没注意到。但到目前为止,我还没有收到任何compaints。必须尽快改变方法。那么,Asaph,有什么好方法呢?我的意思是获取以前的网址??
猜你喜欢
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2014-08-01
相关资源
最近更新 更多