2009-12-18 124 views
2

好的,这是我的情况。PHP,HTTP_REFERER无法在iframe上工作?

我有一个页面,index.php文件,这是mainsite(Flash网站)

我呼吁其他页面iframe.php包含的index.php

另一个页面的iframe中,test.php的。里面有2个环节,第一个环节是直接的index.php,另一个环节是iframe.php

我测试:

  • 我点击链接1,当我跟踪/回声HTTP_REFERER,它显示“test.php”,但

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

为什么显示“iframe.php”? HTTP_REFERER不能在iframe上工作?

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

的源代码为:为的index.php test.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> 

的源代码:

.... 
<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> 
+0

请发布'index.php','test.php'和'iframe.php'的源代码,以便我们可以尝试重现您的问题。 – Asaph 2009-12-18 04:10:58

+0

roger那。给我5分钟 – mysqllearner 2009-12-18 04:11:35

回答

1

在这两种情况下,你”重新看到index.php的输出。这里的原因:

情景1)

当您从链接打index.phptest.php,它加载index.php(与test.phpHTTP_REFERER)。

方案2)

当您从链接打iframe.phptest.php,它加载iframe.php在标签(与iframe.phpHTTP_REFERER)在内部加载index.php

+0

更新我的问题与源代码。请看看,看看有什么不对吗? – mysqllearner 2009-12-18 04:21:58

+0

更新了我的回答 – Asaph 2009-12-18 04:28:01

+0

不,结果不一样。当我点击普通链接时,它显示test.php(这是正确的),但是当我点击iframe链接时,它会显示iframe.php。这就是为什么我在这里问这个问题。你和我有不同的结果?我可以知道你使用的是什么操作系统和浏览器吗? – mysqllearner 2009-12-18 04:33:29

0

不幸的是,没有。在iframe中显示的页面的HTTP_REFERER值始终是包含iframe的父页面。

无论如何HTTP_REFERER往往有点棘手。如果你可以避免在它周围建立任何重要的逻辑,这是一个好主意。

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

+0

通常我使用会话。但是这一次,我不能这样做。我会给我的客户端只有链接,例如:This is Iframe,我不能在这里做很多。或者你有更好的解决方案?我的情况:给1个链接到客户端来检测以前的URL。 – mysqllearner 2009-12-18 04:27:22

+0

@Paul:当您打开多个浏览器窗口/标签页时,您推荐的'$ _SESSION'方法很容易出错。不同的请求可以覆盖彼此的会话值。 – Asaph 2009-12-18 04:52:20

+0

啊..我没注意到。但到目前为止,我还没有收到任何合作伙伴。要尽快改变方法。那么,Asaph,最好的方法是什么?我的意思是得到以前的URL? – mysqllearner 2009-12-18 05:01:09