Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
区分facebook应用程序iframe和正版网站访问(django应用程序)_Django_Facebook - Fatal编程技术网

区分facebook应用程序iframe和正版网站访问(django应用程序)

区分facebook应用程序iframe和正版网站访问(django应用程序),django,facebook,Django,Facebook,我试图区分来自facebook应用程序iframe内部的web请求和常规web访问。这样我可以提供正确的布局 当第一个iframe请求进入我的服务器时,我设置了一个会话变量(facebook将一个名为signed_request的POST参数发送到默认的画布url),但是如果用户在(facebook之外)访问我的网站,他们得到的是iframe布局,而不是我的网站应该是什么样子 我已经查看了iframe请求中的所有元信息,但我没有看到任何可以让我区分两者的信息 任何帮助都将不胜感激 更新:我正在使

我试图区分来自facebook应用程序iframe内部的web请求和常规web访问。这样我可以提供正确的布局

当第一个iframe请求进入我的服务器时,我设置了一个会话变量(facebook将一个名为
signed_request
的POST参数发送到默认的画布url),但是如果用户在(facebook之外)访问我的网站,他们得到的是iframe布局,而不是我的网站应该是什么样子

我已经查看了iframe请求中的所有元信息,但我没有看到任何可以让我区分两者的信息

任何帮助都将不胜感激


更新:我正在使用AppEngine作为我的应用程序主机

最简单的方法是创建一个从Facebook访问的唯一url,例如,如果您的网站是www.site.com,则在您的服务器上设置fb.site.com或www.site.com/fb,并将其指向与www.site.com相同的位置(当然,还可以将您的Facebook应用程序设置为使用备用url)。然后,您的服务器代码可以轻松检查访问url,以确定是否为Facebook或独立网站设置格式


另一种方法是将服务器端的会话变量与客户端的一些javascript结合起来。您可以在收到signed_request参数时设置会话变量,然后在每次页面加载时检查它。只要设置了会话变量,就可以输出iframe格式并向每个页面添加一点javascript代码。javascript使用类似于
if(window.self!=window.top){//inside-iframe}
的内容检查页面是否仍在iframe中。如果不在iframe内,则表示会话变量现在已过时,因此js跳转到某个url,告诉服务器清除该变量,然后以常规布局重新显示页面。

我应该提到,我使用appengine作为主机,为了提供https支持,您需要使用它们提供的子域(即myapp.appspot.com)因此,除非他们提供裸体https支持,否则这个解决方案将无法工作(至少对我而言)我对appengine不是很熟悉,但是你不能创建一个子目录吗?比如myapp.appspot.com/fb?当然可以,但我想做的就是看看请求是否来自facebook iframe,如果是,则包括一个样式表,使页面布局略有不同(除了布局,所有URL保持不变)。更改域是一回事(在想到https问题之前,我一直喜欢这种解决方案),但更改应用程序本身的路径会产生各种副作用。幸运的是,如果要对每个请求进行检查,必须创建一个不同的url(如果方便的话,可以添加一个参数而不是子目录)。如果可以使所有链接都与当前路径相关,那么它几乎可以是自动的。否则,您可以使用
标记,或者定义一个将设置为“/”或“/fb/”的变量在你的所有链接中都使用它。另一种方法是将会话方法与每个页面上的一些javascript结合起来,检查你是否仍在iframe中,如果没有,则跳转到“会话清除”页面。我想这将是我的问题,我如何检查我是否在iframe中?