2014-01-20 3 views
0

Я делаю простую вкладку страницы для facebook, но, похоже, проблема связана только с Safari на Mac. С Safari в Windows нет проблем. Страница выполнена в 3 типах - fangate (когда пользователю не понравилась страница), на главной странице (когда понравилось) и на третьей странице. Когда я вхожу на вкладку страницы, она показывает fangate. Затем я «люблю» страницу и показывает главную страницу, но когда я нажимаю ссылку на третью страницу, она показывает мне fangate. Я думаю, что это потеряла сессию signed_request. Есть ли способ передать signed_request на каждой странице без использования сеансов?signed_request исчезает на сафари?

ответ

1

Я не уверен, что вы используете PHP SDK. Если это так, этот код может работать на вас. Если подписанный запрос найден (как и на главной странице после того, как вам понравилась страница), сохраните его в сеансе. Для каждой страницы после вы проверяете версию сеанса подписанного запроса. Этот код должен отображаться на каждой странице (с включенным или любым другим).

<? php 
//get signed request 
$signedRequest = $facebook - > getSignedRequest(); 

//check if inital vars can be used or use session loaded vars 
if (isset($signedRequest)) { 
    echo '<!-- INITIAL LOAD -->'; 
    $_SESSION['signedRequest'] = $signedRequest; 
} else { 
    echo '<!-- STORED SESSION -->'; 
    $signedRequest = $_SESSION['signedRequest']; 
} 

//check like status 
$liked = (!$signedRequest['page']['liked'] ? false : true); 

//check if page is liked 
if ($liked === false) { 
    //********************* NOT LIKED, SHOW LIKE GATE ********************* 
} else { 
    //********************* LIKED, SHOW PAGE CONTENT ********************* 
} 
?> 
0

Извините за поздний ответ. Да, я использую PHP SDK и тот же самый код, который вы там написали (проверьте для signedRequest, и если есть один -> сохранить его в сеансе, иначе -> получить его из сеанса). Но похоже, что Safari теряет параметры сеанса. Два пути я понял, как работают следующие:

  1. Целевые все ссылки на _top и добавить к ним параметры, так что каждый раз, когда пользователь изменяет страницу, она перезагружает всю страницу (не только в IFRAME) и передает переменные через app_data.

  2. Добавить signRequest для каждой ссылки, поэтому всякий раз, когда пользователь переключается на страницу, в URL-адресе есть подписьRequest. Этот метод фактически не обновляет всю страницу, поскольку он отправляет параметры на веб-сайт iframe, поэтому он немного лучше первого.

Оба метода требуют передачи данных по ссылкам, которые я не хочу делать, потому что мне нужно будет изменить каждую ссылку в моем приложении. Я еще не пытался хранить signedRequest в cookie.

Но если есть ЛЮБОЙ другой способ, который не требует значительного изменения ссылок или хранения данных в кукисах, я буду рад их услышать.

Смежные вопросы