任何人都知道是否可以使用PHP检查网站是否在iframe内。
我知道这可以用javascript,但我找不到任何关于PHP的例子?
答案 0 :(得分:40)
PHP从不在iframe中。 PHP在服务器端执行,并生成HTML,Javascript或文本等输出。 PHP生成的输出可能会生成或驻留在iframe中,但从不生成PHP本身。
其他详细信息
关于您在评论中添加的其他详细信息(您希望区分直接访问您网站的请求和通过Facebook应用程序发出的请求),您可以使用以下几种技术:
您可以检查引荐来源以确定请求是来自Facebook网址,来自您自己网站上的其他网页,来自第三方网站,还是来自直接流量。此方法并非万无一失,但可能会提供比您当前收到的应用程序更多的信息。
您可以为您网站上运行的应用程序和Facebook版本创建单独的URL。使用$_SERVER['REQUEST_URI']
,您可以轻松检测是否通过“yoursite.com/fbapp”或“yoursite.com/localapp”访问了您的应用程序。这两个URL都可以通过Apache的mod_rewrite或您选择的别名解决方案引用相同的脚本。
这种方法可能最容易实现。如果您在向Facebook提供应用程序URL时可以提供URL参数,只需添加参数即可。例如:
?access_method=facebook
在PHP中,您可以轻松检查access_method
参数的存在和值,并根据需要采取措施。
答案 1 :(得分:7)
不,PHP是服务器端。它无法知道它是否在iframe中。
答案 2 :(得分:4)
对于任何使用此旧线程的人:有一种非常简单的方法可以检入PHP,无论是否通过iframe加载页面。
if( isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] == 'iframe' ) {}
答案 3 :(得分:3)
您可以查看$_SERVER['HTTP_REFERER']
。这实际上不可信,因为浏览器并不总是提供此信息。同样HTTP_REFERER
并不总是意味着iframe,但对于特殊情况,这很好。
答案 4 :(得分:1)
<?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-sensitive”。如果在https://x
设置为YourFrameURL
时从http://x
加载框架,则无效。通过使用:
if(!$_SERVER['HTTP_REFERER'] == 'http://YourFrameURL' or !$_SERVER['HTTP_REFERER'] == 'https://YourFrameURL') {