在应用程序内的页面之间移动时访问Facebook签名请求$facebook->;getSignedRequest()


Access the Facebook signed_request when moving between pages inside an application? $facebook->getSignedRequest()

我正在Facebook页面内安装一个应用程序。我在$_request中或使用Facebook PHP SDK Facebook::getSignedRequest()函数时收到了signed_request变量。然而,在我的应用程序中,当我转到应用程序中的另一个页面时,signed_request并没有跟随它

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

请告知!提前感谢!

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

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

这并不漂亮,但你的url在iframe中时会被隐藏起来——如果你的应用程序不在ifame中,我不建议你这样做。

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

我希望有一种比这更好的工作方式,但这是我迄今为止唯一找到的方法(不需要在facebook url上使用app_data查询var进行导航)。

将signedRequest保存在会话中并重用它如何?

$signedRequest = $facebook->getSignedRequest();
if(isset($signedRequest)) $_SESSION['signedRequest'] = $signedRequest;
else $signedRequest = $_SESSION['signedRequest'];