我只是想问一个关于Facebook“signed_request”的问题。
我正在为我的应用程序使用Zend Framework。 事情是;当用户首次授权我的应用程序或从apps.facebook.com/my_app/ URL进入应用程序时,我正在成功检索signed_request。
实际上,我是从apps.facebook.com/my_app/index.php检索的(感谢this question)
好的,app已经启动,我收到了签名请求,将其存储在用户会话中。但是,当用户点击我的应用中的任何位置时,会再次创建$ facebook对象,但这一次,它没有signed_request。
根据this topic on Codeplex,我可以预期signed_request会出现在用户的第二个请求中:
您应该使用已签名的请求值,而不是使用Cookie Facebook会在每次请求时发送到您的页面。
另一方面,Facebook文档说:
signed_request会在Facebook.com上传递给Apps.com 加载到Facebook环境
现在,Facebook是否在每次通话时发送此请求,或者我的应用程序是否存在技术问题?可能是IFrame问题吗?当用户单击“类别”时,页面将加载到相同的iframe中,并且地址栏上的URL不会更改。
答案 0 :(得分:3)
我认为“每个请求”的含义基本上与定义不同。当首次构建包含iframe时,即当用户直接将apps.facebook.com/your_app/somepage.php作为其浏览器位置时,Facebook会将signed_request发送到您的页面 。如果用户在页面上跟随“正常”链接,导致仅重新加载iframe而不是整个页面,则不会发送signed_request。如果以这种方式考虑它有问题,则在用户首次加载您的应用时会发送signed_request,但不会在每个后续请求中发送。对此存在一些混淆的原因是许多程序员通过使所有链接都使用target=_top
并将其指向apps.facebook.com/your_app/yourpage.php而不是www.yourdomain.com而采取了一种黑客的捷径。 /yourpage.php。由于这会导致每次重新构建整个页面,因此确实具有在每次页面提取时发送signed_request的效果。但是在正常(和推荐)操作中,您需要依靠仅发送一次的signed_request。