Я работаю над основанным на iframe приложением canvas и столкнулся с серьезным препятствием на пути поиска хорошего способа отслеживания сеанса Facebook при переходе между страницами внутри iframe. При первой загрузке страницы Facebook передает все необходимые параметры fb_sig
на ваш URL обратного вызова через строку запроса. При последующих загрузках страницы (например, после нажатия на ссылку в вашем приложении) кажется, что вы должны выполнить одно из следующих действий, чтобы сохранить сведения о сеансе Facebook:
Используйте target="_top"
в ссылках и обновляйте всю страницу Facebook при каждом запросе. Таким образом, при загрузке iframe передается новый набор fb_sig
параметров. Но это влечет за собой затраты на загрузку всего, что находится за пределами iframe, каждый раз, когда вы меняете страницы.
Вручную добавьте все параметры fb_sig
, полученные с первой страницы, к URL-адресу всех дополнительных страниц. Это довольно уродливо, и у вас останется устаревшая информация, которая может быть не точной. Вы продолжаете использовать первые значения, полученные от Facebook, но с тех пор эти значения могли измениться (например, выход пользователя из системы или истечение срока действия ключа сеанса), и у вас не будет возможности узнать об этом.
Сохраните информацию в файле cookie и каким-либо образом проверяйте наличие новых значений при каждой загрузке страницы, обновляя ее при необходимости. Я видел эту технику в нескольких местах, но после нескольких дней поиска я не нашел ни одного примера того, как на самом деле это сделать. Возможно, клиентская библиотека PHP делает это для вас автоматически, но мое приложение использует Perl и модуль WWW::Facebook::API
, и я не нашел в нем ничего такого, что решало бы эту проблему. Я также читал, что этот метод сталкивается с проблемами в некоторых браузерах (в частности, в Safari), которые не позволяют устанавливать файлы cookie в iframe, если его домен не соответствует домену родительского фрейма. Все это кажется чрезвычайно сложным и плохо документированным из-за того, что такое элементарная и необходимая способность для приложения (переход на другую страницу.)
Так как я не смог найти действительно полезных примеров того, как достичь # 3, в настоящее время я склоняюсь к # 1, какому-то несчастному компромиссу. Кто-нибудь видел хорошее, полное объяснение и пример использования # 3, который работает во всех основных браузерах? Я решил спросить, прежде чем сдаться и пойти с # 1.