Php 检查站点是否在iframe内
任何人都知道是否可以使用PHP检查站点是否位于iframe中Php 检查站点是否在iframe内,php,iframe,Php,Iframe,任何人都知道是否可以使用PHP检查站点是否位于iframe中 我知道使用javascript是可能的,但我找不到任何使用PHP的示例?不,PHP是服务器端。它无法知道它是否在iframe中 PHP从不在iframe中。PHP在服务器端执行,并生成HTML、Javascript或文本等输出。PHP生成的输出可能产生或驻留在iframe中,但绝不是PHP本身 附加细节 关于您在评论中添加的其他详细信息(您希望区分直接发送到站点的请求和通过Facebook应用程序发送的请求),您可以使用以下几种技术
我知道使用javascript是可能的,但我找不到任何使用PHP的示例?不,PHP是服务器端。它无法知道它是否在iframe中 PHP从不在iframe中。PHP在服务器端执行,并生成HTML、Javascript或文本等输出。PHP生成的输出可能产生或驻留在iframe中,但绝不是PHP本身
附加细节 关于您在评论中添加的其他详细信息(您希望区分直接发送到站点的请求和通过Facebook应用程序发送的请求),您可以使用以下几种技术:
$\u服务器['REQUEST\u URI']
,您可以轻松检测您的应用程序是通过'yoursite.com/fbapp'还是'yoursite.com/localapp'访问的。两个URL都可以通过Apache的mod_rewrite或您选择的别名解决方案引用相同的脚本
?access_method=facebook
在PHP中,您可以轻松检查
access\u方法
参数的存在和值,并根据需要采取措施。您可以检查$\u服务器['HTTP\u REFERER']
。这是不可信的,因为浏览器并不总是提供这些信息。另外,HTTP\u REFERER
并不总是指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
?>
if( isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] == 'iframe' ) {}
谢谢你的回答。这是因为人们可以通过使用我的应用程序。facebook应用程序或直接在浏览器中。因此,如果用户在facebook上的我的应用程序上,链接应该与直接通过浏览器而不是通过facebook在我的网站上的链接有所不同。知道我该怎么做吗?@Simon这里的方法是使用javascript检查页面是否加载在iframe中。请在此处阅读更多信息:@antide需要与某种PHP@Simon很抱歉,在PHP中无法获得快速、直接和准确的解决方案。最好的做法是使用javascript来处理这个问题。@Ancide yearh,这有点烦人$\u服务器['HTTP\u REFERER']在facebook上输出正确的url,但在我的网站上直接通过浏览器,我得到以下错误:未定义索引:HTTP\u REFERER
$\u服务器['HTTP\u REFERER']
在您直接访问该网站时未设置。您可以使用以下方法对其进行测试:if(isset($\u SERVER['HTTP\u REFERER']){…}
。看起来该解决方案可行。我将在IE中测试它并返回!:-)@Simon同样,我建议检查HTTP\u REFERER
是否是facebook中的一个特定URL,因为如果其他网站有到您网站的直接链接,并且有人来到您的网站抛出此链接,那么HTTP\u REFERER
将等于用户来自的URL。是的,没错。如果我是通过facebook来的。一个链接,url将是apps.facebook.com/application,因为脚本认为我是通过facebook使用该应用程序的:实际上:if(isset($\u SERVER['HTTP\u REFERER'])和&$\u SERVER['HTTP\u REFERER'])!='http://YourFrameURL“){}
检查referer是否已设置且与您的urlGood解决方案不同!与Wordpress插件完美配合,我不希望脚本在iFrame中排队。谢谢。我找不到iframe是该字段有效值的文档,在sec fetch dest头上也找不到太多其他值。您是否有关于此工作方式的链接或资源?每个浏览器都支持它吗?它在chrome上工作,完全符合我的需要,但我只是想澄清一下它的浏览器支持。Geilt,我也找不到任何关于这方面的信息。因此,我只需通过代理或直接,使用yes/no Adguard(以及类似的方法)比较所有带有和不带iFrame的$_服务器。许多$\u服务器变量与其他值一起存在。唯一一个总是在iFrame中显示给我们的(无论连接如何)是$\u服务器['HTTP\u SEC\u FETCH\u DEST']。IE、Firefox和Safari不支持此标题-
if( isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] == 'iframe' ) {}