запрос Internet Explorer ajax не прошел проверку подлинности - PullRequest
0 голосов
/ 21 сентября 2011

Мой рабочий процесс приложения выглядит следующим образом: пользователи проходят проверку подлинности, они запускают игру, и через некоторое время я делаю ajax-запрос для получения некоторых данных, но этот запрос также проверяется.

Проблема в том, что при первом запросе ajax, Internet Explorer видит пользователя как не прошедшего проверку подлинности и вызывает перенаправление, и все работает нормально.

Эта проблема возникает только в Internet Explorer.

Есть идеи?

1 Ответ

0 голосов
/ 21 сентября 2011

Если ваше приложение работает в IFRAME, вам следует установить заголовки P3P, чтобы включить куки.

Вы должны отправить специальный HTTP-заголовок в своем первом ответе:

P3P: CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV"

Это должно решить проблему для IE, но вы, вероятно, столкнетесь с той же проблемой в Chrome и Safari.Он появляется только тогда, когда пользователь впервые посещает ваше приложение.Вы можете эмулировать его, удалив всю личную информацию из вашего браузера с помощью функции очистки браузера.

Я решил эту проблему, сохранив начальный атрибут signature_request в переменной Javascript и отправив его во всех запросах AJAX в качестве дополнительного заголовка HTTP (это возможно, если вы используете jQuery).Также я добавил один и тот же атрибут ко всем ссылкам и формам.

Пример кода:

var signed_request = '...'; // My signed request goes here

...

function signedUrl(url){
  var url_parts = url.split('#', 2);

  var new_url = url_parts[0] + (url_parts[0].indexOf('?') == -1 ? '?' : '&') + 'stored_signed_request=' + signed_request;

  if(url_parts.length == 2) {
    new_url = new_url + '#' + url_parts[1];
  }

  return new_url;
}

...

  if(document.cookie.indexOf('fbsr_') == -1){
    $('a').live('click', function(){
      var href = $(this).attr('href') || '';

      if(href !== ''){
        $(this).attr('href', signedUrl(href));
      }
    });

    $('form').live('submit', function(){
      $(this).append('<input type="hidden" name="stored_signed_request" value="' + signed_request + '">');
    });

    $.ajaxSetup({
      beforeSend : function(request){
        request.setRequestHeader('signed-request', signed_request);
      }
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...