signed_request исчезает в приложении Facebook

Я просто хочу задать вопрос о фейсбуке «signed_request».

Я использую Zend Framework для своего приложения. Дело в том; когда пользователь впервые авторизует мое приложение ИЛИ входит в приложение по URL-адресу apps.facebook.com/my_app/, я успешно получаю signed_request.

На самом деле я получаю его из apps.facebook.com/my_app/index.php (Благодаря этот вопрос)

Хорошо, приложение было запущено, я получил подписанный запрос, сохранил его в пользовательской сессии. Однако, когда пользователь щелкает где-нибудь в моем приложении, объект $ facebook создается снова, но на этот раз у него нет signed_request.

Согласно этой теме на Codeplex, я могу ожидать, что signed_request появится во втором запросе пользователя. :

Вместо использования файла cookie вы должны использовать значение подписанного запроса, которое Facebook ПЕРЕДАЕТ на вашу страницу при каждом запросе.

С другой стороны, в документации Facebook говорится:

Sign_request передается приложениям на Facebook.com, когда они загружаются в среду Facebook.

Теперь, отправляет ли Facebook этот запрос при каждом звонке или в моем приложении есть техническая проблема? Может быть проблема с IFrame? Когда пользователь нажимает «категории», страница загружается в том же окне iframe, а URL-адрес в адресной строке не изменяется.


person emregecer    schedule 11.11.2011    source источник


Ответы (1)


Я думаю, что это в основном разница в определении того, что означает «каждый запрос». Facebook отправит POST signed_request на вашу страницу только, когда содержащий iframe создается впервые, то есть когда пользователь переходит непосредственно к apps.facebook.com/your_app/somepage.php в качестве местоположения своего браузера. Если пользователь затем переходит по «обычной» ссылке на вашей странице, которая приводит к перезагрузке только iframe, а не всей страницы, signed_request отправляться не будет. Если это помогает думать об этом так, signed_request отправляется, когда пользователь впервые загружает ваше приложение, но не при каждом последующем запросе. Причина некоторой путаницы в том, что многие программисты пошли на хитрость, заставив все свои ссылки использовать target=_top и направив их на apps.facebook.com/your_app/yourpage.php, а не на www.yourdomain.com/yourpage.php . Поскольку это приводит к тому, что вся страница каждый раз перестраивается, это действительно имеет эффект отправки signed_request при каждой выборке страницы. Но при нормальной (и рекомендованной) работе вам нужно рассчитывать на то, что signed_request будет отправлен только один раз.

person Floyd Wilburn    schedule 12.11.2011
comment
Хороший и ясный ответ. Теперь я понимаю суть проблемы. Спасибо за информативный комментарий :) - person emregecer; 12.11.2011