facebook getUser () на вкладке страницы вентилятора iframe показывает внутреннюю ошибку сервера только в IE

У меня есть приложение на вкладке страницы facebook, которая использует getUser, чтобы я мог получить идентификатор facebook этого пользователя, который работает как на Chrome, так и на Firefox, но не на IE. Я пытался очистить кеш несколько раз! вот что я делаю (это рамочная система codeigniter)

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Register extends CI_Controller { function __construct() { parent::__construct(); $this->load->library('facebook', $this->config->item('fb_config')); $this->load->library('Form_validation'); $this->load->library('session'); $this->load->model('users_model', 'users'); } public function index() { $user_id = $this->facebook->getUser(); if ($user_id) { // We have a user ID, so probably a logged in user. // If not, we'll get an exception, which we handle below. try { $user_profile = $this->facebook->api('/me', 'GET'); $data['fb_id'] = $user_profile['id']; $this->session->set_userdata('fb_id', $data['fb_id']); $users = $this->users->get_by_fb_id_register($data['fb_id'], array('full_name', 'age', 'email', 'phone_number')); // not first time if ($users != 0 && $users->num_rows() < 1) { $data['full_name'] = $user_profile['name']; $birthDate = explode("/", $user_profile['birthday']); $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md") ? ((date("Y") - $birthDate[2]) - 1) : (date("Y") - $birthDate[2])); $data['age'] = $age; $data['email'] = $user_profile['email']; } else { $data = $users->row_array(); } } catch (FacebookApiException $e) { // If the user is logged out, you can have a // user ID even though the access token is invalid. // In this case, we'll get an exception, so we'll // just ask the user to login again here. $login_url = $this->facebook->getLoginUrl( array( 'scope' => 'email, user_birthday, publish_actions, publish_stream', //read_stream, friends_likes, user_likes // 'redirect_uri' => $this->config->item('fan_page_app_link'), //the url to go to after a successful login )); echo '<script> window.top.location.href = "' . $login_url . '"; </script>'; exit; } } else { // No user, print a link for the user to login $login_url = $this->facebook->getLoginUrl( array( 'scope' => 'email, user_birthday, publish_actions, publish_stream', //read_stream, friends_likes, user_likes 'redirect_uri' => $this->config->item('fan_page_app_link'), //the url to go to after a successful login )); echo '<script> window.top.location.href = "' . $login_url . '"; </script>'; exit; } } ?> 

url, который дает ошибку 500:

 https://www.facebook.com/dialog/oauth?client_id=1397280120532513&redirect_uri=https%3A%2F%2FMYWEBSITE.com%2Fmatchgame%2Fregister&state=bc353f470176d5a62995722808e3f406&sdk=php-sdk-3.2.3&scope=email%2C+user_birthday%2C+publish_actions%2C+publish_stream 

Я не знаю, нужно ли это делать с ошибкой, но я сделал следующее:

единственное изменение, которое я сделал в файле facebook.php, переименовывает его в Facebook.php и добавляет эту строку

 Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; 

к __construct, потому что я получал эту ошибку

 Invalid or no certificate authority found, using bundled information 

althoug все три файла facebook.php, base_facebook.php и fb_ca_chain_bundle.crt находятся в одной папке, папке библиотек

в верхней части html-файла после заголовка этого кода:

 <script type="text/javascript"> function NotInFacebookFrame() { return top === self; } function ReferrerIsFacebookApp() { if (document.referrer) { return document.referrer.indexOf("apps.facebook.com") != -1; } return false; } if (NotInFacebookFrame() || ReferrerIsFacebookApp()) { top.location.replace("<?php echo $this->config->item('fan_page_app_link'); ?>"); } </script> 

так что, если пользователь обращается к приложению непосредственно с сайта, он будет перенаправлен на сайт facebook.

Обновить

Если я вхожу в приложение непосредственно с моего сайта, используя этот URL-адрес https://MYWEBSITE.com/matchgame/register, тогда я возвращаюсь к приложению из facebook, это работает, он швы, есть файл cookie, который блокируется, если я вхожу в приложение с facebook !!!

Solutions Collecting From Web of "facebook getUser () на вкладке страницы вентилятора iframe показывает внутреннюю ошибку сервера только в IE"

Я, наконец, нашел решение, очевидно, все, что мне нужно для IE, чтобы принимать файлы cookie с несколькими браузерами – это заголовок политики P3P, все, что я сделал, поскольку это PHP-приложения – это следующий бит кода до выхода любой страницы:

 header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"'); 

или это в головном блоке

 <meta http-equiv="P3P" content='CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"' /> 

если вы используете что-либо иное, кроме PHP, или если вы предпочитаете метатег поверх PHP-кода.