【问题标题】:Access the Facebook signed_request when moving between pages inside an application? $facebook->getSignedRequest()在应用程序内的页面之间移动时访问 Facebook signed_request? $facebook->getSignedRequest()
【发布时间】:2012-03-26 06:16:40
【问题描述】:
我正在 Facebook 页面内安装应用程序。我在 $_REQUEST 中或在使用 Facebook PHP SDK Facebook::getSignedRequest() 函数时收到了signed_request 变量。但是,在我的应用程序中,当我转到应用程序中的不同页面时,signed_request 不会跟随它。
我知道它被放置在 $_SESSION 中,并且 signed_request 数据存储在会话中,但是我应该调用什么方法来获取该数据?我是否必须自己将其从会话中剥离而不使用 PHP SDK?只要我在 $_REQUEST 或通过 $_SESSION 收到 getSignedRequest ,我希望它总是给我相同的结果。
请指教!提前致谢!
【问题讨论】:
标签:
php
facebook
facebook-page
【解决方案1】:
我认为这里的问题在于第三方 cookie,这是我经常遇到的问题。
我过去解决它的方法是检查签名请求的初始负载,如果存在,将原始签名请求数据附加到所有链接上的查询变量(即http://www.example.com/page&signed_request=<<signed_request>>)
这不是很漂亮,但是您的 url 隐藏在视图中,因为它们在 iframe 中 - 如果您的应用程序不在 iframe 中,我不建议这样做。
您还需要检查任何可能影响请求中数据的 Javascript 或服务器端代码,并相应地修改您的网址。
我希望有比这更好的工作方式,但这是迄今为止我想出的唯一方式(没有诉诸于使用 facebook url 上的 app_data 查询变量进行导航)。
【解决方案2】:
将signedRequest保存在Session中并重用它怎么样?
$signedRequest = $facebook->getSignedRequest();
if(isset($signedRequest)) $_SESSION['signedRequest'] = $signedRequest;
else $signedRequest = $_SESSION['signedRequest'];