0

我正在 Facebook 页面内安装应用程序。我在 $_REQUEST 中或在使用 Facebook PHP SDK Facebook::getSignedRequest() 函数时收到了 signed_request 变量。但是,在我的应用程序中,当我转到应用程序中的不同页面时,signed_request 不会跟随它。

我知道它被放置在 $_SESSION 中,并且 signed_request 数据存储在会话中,但是我应该调用什么方法来获取该数据?我是否必须自己从会话中删除它而不使用 PHP SDK?只要我在 $_REQUEST 或通过 $_SESSION 接收它,我希望 getSignedRequest 总是给我相同的结果。

请指教!提前致谢!

4

2 回答 2

2

我相信这里的问题在于第三方 cookie,这是我经常遇到的问题。

我过去解决它的方法是检查签名请求的初始负载,如果存在,将原始签名请求数据附加到所有链接上的查询变量(即http://www.example.com/page&signed_request=<<signed_request>>

这不是很漂亮,但是您的 url 在 iframe 中是隐藏的 - 如果您的应用程序不在 iframe 中,我不建议您这样做。

您还需要检查任何可能影响请求内数据的 Javascript 或服务器端代码,并相应地修改您的网址。

我希望有比这更好的工作方式,但这是迄今为止我想出的唯一方式(没有诉诸于在 facebook url 上使用 app_data 查询变量进行导航)。

于 2012-03-25T22:16:40.483 回答
0

将签名请求保存在会话中并重用它怎么样?

$signedRequest = $facebook->getSignedRequest();
if(isset($signedRequest)) $_SESSION['signedRequest'] = $signedRequest;
else $signedRequest = $_SESSION['signedRequest'];
于 2011-11-22T18:41:15.100 回答