【发布时间】:2009-08-16 17:30:37
【问题描述】:
像 $ENV{'HTTP_REFERER'} 一样简单吗?或者我还有什么需要做的吗?
示例: 我的网站:sample.php
使用 iFrame 调用站点:somesite.com
我希望 sample.php 在加载时能够使用“somesite.com”作为变量进行输入。
【问题讨论】:
标签: php iframe http-referer
像 $ENV{'HTTP_REFERER'} 一样简单吗?或者我还有什么需要做的吗?
示例: 我的网站:sample.php
使用 iFrame 调用站点:somesite.com
我希望 sample.php 在加载时能够使用“somesite.com”作为变量进行输入。
【问题讨论】:
标签: php iframe http-referer
内嵌框架和普通页面没有区别。并且最初使用 src 加载内联框架将发送 HTTP 引用。
【讨论】:
首先,您的页面不得依赖引用者是否存在或正确:它是由浏览器发送的信息,可以:
有关更多信息,请参阅,例如:
这些帖子都“同意”我的观点^^
现在,您最终可以使用它来添加一些功能;但您不能依赖让您的网站运行 ;-)
【讨论】:
要真正可靠地访问父 URL,您可以在嵌入父 URL 时将 GET 参数添加到包含父 URL 的 iframe src。您可以使用 Javascript 将其与嵌入一起自动添加。
这是一个在 <body> 标记末尾嵌入 iframe 的示例:
var iframe = document.createElement('iframe');
iframe.src = '/sample.php?parent=' + window.location;
document.body.appendChild(iframe);
然后,您可以通过以下方式从 PHP 可靠地访问父 URL:
$parent_url = $_GET['parent'];
【讨论】:
正如 Pascal MARTIN 所说,您不应该绝对相信 Referer 值。
扩展 Gumbo 的答案:由于 Referer 作为 HTTP 请求中的标头传输,因此在 <iframe> 中加载的脚本中检索它与为任何其他脚本检索它完全相同。
当浏览器请求由<iframe> 中的src 属性指定的页面时,它会像对任何其他资源一样提交一个HTTP 请求,并将包含Referer 标头值。
Referer 标头的值将包含托管 <iframe> 的页面的 URL。因此,如果您有一个名为 page-with-iframe.php 的 PHP 脚本,并且它包含 <iframe src="sample.php" />,则对 sample.php 的 HTTP 请求可能类似于:
GET /sample.php HTTP/1.1
Host: somesite.com
...
Referer: http://somesite.com/page-with-iframe.php
在 sample.php 中,您将使用 $ENV{'HTTP_REFERER'} 检索值,然后您可以从那里解析出热名称 somesite.com。
【讨论】: