Получать доступ к Facebook подписано_request при переходе между страницами внутри приложения? $ Facebook-> getSignedRequest () - PullRequest
0 голосов
/ 22 июня 2011

Я устанавливаю приложение внутри страницы Facebook. Я получил переменную signature_request в моем $ _REQUEST или при использовании Facebook PHP SDK Facebook :: getSignedRequest (). Однако в моем приложении, когда я перехожу на другую страницу в приложении, подписанный запрос не следует за ним.

Я понимаю, что он помещен в $ _SESSION, а данные signature_request хранятся внутри сеанса, но какой метод я должен вызывать для получения этих данных? Должен ли я сам удалить его из своей сессии и не использовать PHP SDK? Я ожидаю, что getSignedRequest всегда будет давать мне один и тот же результат, пока я получаю его в $ _REQUEST или через $ _SESSION.

Пожалуйста, сообщите! Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Я полагаю, что проблема заключается в файлах cookie сторонних производителей, и я часто сталкиваюсь с ними.

Способ, который я решил в прошлом, состоит в том, чтобы проверить начальную загрузку для подписанного запроса и, если имеется, добавить необработанные данные подписанного запроса к запросу var во всех ссылках (т.е. http://www.example.com/page&signed_request=<<signed_request>>)

Это не красиво, но ваши URL-адреса скрыты от просмотра, поскольку они находятся в iframe - я бы не советовал это делать, если ваше приложение не находится внутри iframe.

Вам также необходимо проверить любой код Javascript или серверной стороны, который может повлиять на данные в запросе, и соответствующим образом изменить ваши URL-адреса.

Я надеюсь, что есть лучший способ работы, чем этот, но это единственный способ, который я до сих пор выяснил (не прибегая к использованию запроса app_data var на URL-адресах Facebook для навигации).

0 голосов
/ 22 ноября 2011

Как насчет сохранения подписанного запроса в сеансе и его повторного использования?

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