【发布时间】:2011-07-12 10:11:15
【问题描述】:
任何人都知道是否可以使用 PHP 检查网站是否在 iframe 中。
我知道使用 javascript 是可能的,但我找不到任何使用 PHP 的示例?
【问题讨论】:
任何人都知道是否可以使用 PHP 检查网站是否在 iframe 中。
我知道使用 javascript 是可能的,但我找不到任何使用 PHP 的示例?
【问题讨论】:
PHP 从不在 iframe 中。 PHP 在服务器端执行并生成 HTML、Javascript 或文本等输出。 PHP 生成的输出可能会生成或驻留在 iframe 中,但绝不会 PHP 本身。
附加细节
关于您在 cmets 中添加的其他详细信息(您希望区分直接向您的站点发出的请求和通过 Facebook 应用程序发出的请求),您可以使用一些技术:
您可以检查引荐来源网址以确定请求是来自 Facebook URL、来自您自己网站上的另一个页面、来自第三方网站还是直接流量。此方法并非万无一失,但可能会提供比您的应用程序当前接收到的更多信息。
您可以为在您的站点上运行的应用程序和 Facebook 版本创建单独的 URL。使用$_SERVER['REQUEST_URI'],您可以轻松检测您的应用程序是通过“yoursite.com/fbapp”还是“yoursite.com/localapp”访问的。两个 URL 都可以通过 Apache 的 mod_rewrite 或您选择的别名解决方案引用相同的脚本。
这种方法可能是最容易实现的。如果您在向 Facebook 提供应用程序 URL 时可以提供 URL 参数,只需添加一个参数即可。例如:
?access_method=facebook
在 PHP 中,您可以轻松检查 access_method 参数的存在和值,并根据需要采取措施。
【讨论】:
对于登陆这个旧线程的任何人:有一种非常简单的方法可以检查 PHP 是否通过 iframe 加载了您的页面。
if( isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] == 'iframe' ) {}
【讨论】:
不,PHP 是服务器端。它无法知道它是否在 iframe 中。
【讨论】:
<?php
if(!$_SERVER['HTTP_REFERER'] == 'YourFrameURL') {
// Site is NOT loaded from iframe
die('Please load this page from YourFrameURL');
}
else {
// Site IS loaded from iframe: display content
?>
请注意$_SERVER['HTTP_REFERER'] 完全不可靠:它可以被修改。另请注意,此方法是“https 敏感”的。如果框架是从https://x 加载的,而YourFrameURL 设置为http://x,它将不起作用。使用以下方法解决此问题:
if(!$_SERVER['HTTP_REFERER'] == 'http://YourFrameURL' or !$_SERVER['HTTP_REFERER'] == 'https://YourFrameURL') {
【讨论】:
if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != 'http://YourFrameURL') { } checkign 是否设置了referer 并且与您的网址不同
您可以查看$_SERVER['HTTP_REFERER']。这不能真正被信任,因为浏览器并不总是提供这些信息。此外,HTTP_REFERER 并不总是意味着 iframe,但对于特定情况,这很好。
【讨论】:
$_SERVER['HTTP_REFERER'] 直接访问网站时没有设置。你可以用这个来测试它:if (isset($_SERVER['HTTP_REFERER'])) { ... }.
HTTP_REFERER 是否是 facebook 中的特定 URL,因为如果其他网站有直接链接到您的网站并且有人来到您的网站,则抛出此链接HTTP_REFERER 将等于用户来自的 URL。
我找到了一个可以用 php + javascript 实现的解决方法。
在你的 iframe 设置参数iframe_view=true 上的第一个 url 上,然后使用这个 js 再次放置这个 url 参数的所有链接
<script>
$(function() {
$("a").attr('href', function(index, item) {
return item + (item.indexOf('?') != -1 ? "&iframe_view=true" : "?iframe_view=true");
});
});
</script>
然后用 php 像这样读取它:
if (isset($_GET['iframe_view'])) {
//iframe view
}
【讨论】: